{"version":3,"sources":["webpack://v0/./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js","webpack://v0/./node_modules/@fortawesome/fontawesome-free/js/fontawesome.js","webpack://v0/./src/plugins.js","webpack://v0/./node_modules/owl.carousel/dist/owl.carousel.js","webpack://v0/./node_modules/toastr/toastr.js"],"names":["window","document","$","undefined","console","info","stuff","fn","fancybox","div","buttonStr","focusStr","$pressed","defaults","closeExisting","loop","gutter","keyboard","preventCaptionOverlap","arrows","infobar","smallBtn","toolbar","buttons","idleTime","protect","modal","image","preload","ajax","settings","data","iframe","tpl","css","attr","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","touch","vertical","momentum","hash","media","slideShow","speed","thumbs","hideOnClose","axis","wheel","onInit","noop","beforeLoad","afterLoad","beforeShow","afterShow","beforeClose","afterClose","onActivate","onDeactivate","clickContent","current","event","type","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","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","callback","setTimeout","cancelAFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","id","clearTimeout","transitionEnd","t","el","createElement","transitions","transition","OTransition","MozTransition","WebkitTransition","style","forceRedraw","$el","length","offsetHeight","mergeOpts","opts1","opts2","rez","extend","each","key","value","isArray","FancyBox","content","opts","index","self","this","isPlainObject","isMobile","currIndex","parseInt","prevIndex","prevPos","currPos","firstRun","group","slides","addContent","init","prototype","$container","firstItemOpts","addClass","getInstance","body","scrollHeight","innerHeight","append","innerWidth","documentElement","clientWidth","translate","replace","appendTo","$refs","container","forEach","item","find","trigger","activate","jumpTo","obj","str","arr","match","n","items","makeArray","i","$item","found","src","srcParts","options","$orig","contentType","charAt","inArray","$thumb","$trigger","thumb","caption","apply","split","shift","filter","push","Object","keys","updateControls","Thumbs","isActive","create","focus","addEvents","removeEvents","on","e","stopPropagation","preventDefault","previous","next","isScaledDown","originalEvent","requestId","update","stage","hide","show","keycode","keyCode","which","ctrlKey","altKey","shiftKey","target","is","idleSecondsCounter","isIdle","showControls","idleInterval","setInterval","isDragging","hideControls","off","clearInterval","duration","pos","isMoved","slidePos","stagePos","prop","diff","groupLen","isClosing","isAnimating","createSlide","forcedDuration","isNumeric","$slide","loadSlide","getTranslate","slide","stop","isComplete","removeClass","left","width","className","join","leftPos","setTranslate","top","animate","transform","opacity","complete","isLoaded","revealContent","updateSlide","scaleToActual","x","y","imgPos","posX","posY","scaleX","scaleY","$content","canvasWidth","canvasHeight","height","newImgWidth","newImgHeight","hasError","updateCursor","SlideShow","scaleToFit","end","getFitPos","maxWidth","maxHeight","minRatio","aspectRatio","parseFloat","Math","min","floor","ratio","adjustCaption","adjustLayout","add","navigation","toggleClass","get","clientHeight","centerSlide","siblings","parent","children","hasClass","abs","nextWidth","nextHeight","canPan","isZoomable","Guestures","isFunction","fitPos","ajaxLoad","isLoading","setImage","setIframe","setContent","videoFormat","setError","showLoading","url","success","textStatus","error","jqXHR","one","abort","ghost","$img","$image","checkSrcset","onerror","remove","$ghost","onload","setBigImage","temp","pxRatio","windowWidth","srcset","devicePixelRatio","map","ret","trim","substring","postfix","sort","a","b","j","img","sizes","resolveImageSlideSize","naturalWidth","naturalHeight","round","max","hideLoading","readyState","imgWidth","imgHeight","$iframe","Date","getTime","isReady","$body","frameWidth","frameHeight","contents","ignore","ceil","outerWidth","outerHeight","unbind","empty","isRevealed","hasOwnProperty","parents","$placeholder","insertAfter","html","after","$smallBtn","wrap","first","wrapInner","$spinner","fadeIn","button","$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","scrollTop","scrollLeft","prev","focusableItems","focusedItemIndex","focusableStr","activeElement","instance","isVisible","d","domRect","done","cleanUp","$focus","scrollX","scrollY","name","args","Array","slice","call","arguments","unshift","hasHiddenControls","andCaption","toggleControls","version","command","open","all","destroy","test","navigator","userAgent","use3d","getComputedStyle","getPropertyValue","documentMode","props","position","to","leaveAnimationName","from","propertyName","callCallback","selector","_run","$target","isDefaultPrevented","currentTarget","jQuery","youtube","matcher","params","autoplay","autohide","fs","rel","hd","wmode","enablejsapi","html5","paramPlace","vimeo","show_title","show_byline","show_portrait","fullscreen","instagram","gmap_place","indexOf","gmap_search","param","urlParams","paramObj","provider","providerName","providerOpts","m","p","decodeURIComponent","p1","s","origSrc","contentSource","VideoAPILoader","class","loading","loaded","load","vendor","script","_this","onYouTubeIframeAPIReady","appendChild","YT","Player","events","onStateChange","Vimeo","getPointerXY","result","touches","changedTouches","pageX","pageY","clientX","clientY","distance","point2","point1","what","sqrt","pow","isClickable","onclick","atts","attributes","nodeName","substr","isScrollable","overflowY","overflowX","horizontal","scrollWidth","$bg","bg","$stage","proxy","tapped","ontouchstart","isTouchDevice","offset","realPoints","startPoints","startEvent","canTap","isPanning","isSwiping","isZooming","isScrolling","startTime","distanceX","distanceY","contentLastPos","contentStartPos","sliderStartPos","addEventListener","onscroll","centerPointStartX","centerPointStartY","percentageOfImageAtPinchPointX","percentageOfImageAtPinchPointY","startDistanceBetweenFingers","removeEventListener","ontouchmove","newPoints","onSwipe","onPan","onZoom","ontouchend","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","progress","timer","$button","toggle","$progress","inner","set","force","clear","removeAttr","keypress","hidden","fnMap","val","FullScreen","request","requestFullscreen","ALLOW_KEYBOARD_INPUT","exit","isFullscreen","Boolean","fullscreenElement","enabled","fullscreenEnabled","fullscreenchange","CLASS","CLASS_ACTIVE","FancyThumbs","$grid","$list","list","innerHTML","that","share","currentHash","location","string","entityMap","encodeURIComponent","String","text","shareInstance","shareCurrent","click","href","parseUrl","pop","gallery","triggerFromUrl","escapeSelector","getGalleryID","sel","ch","asCodePoint","charCodeAt","toString","origHash","hashTimer","history","title","pathname","search","hasCreatedHistory","back","replaceState","fb","reverse","tmp","prevTime","currTime","deltaY","deltaX","wheelDelta","detail","_typeof","Symbol","iterator","constructor","_defineProperties","descriptor","enumerable","configurable","writable","defineProperty","_defineProperty","_objectSpread","source","ownKeys","getOwnPropertySymbols","concat","sym","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_arr","_n","_d","_e","_s","_i","err","_iterableToArrayLimit","TypeError","_nonIterableRest","_toConsumableArray","arr2","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","_WINDOW","_DOCUMENT","_MUTATION_OBSERVER","_PERFORMANCE","mark","measure","MutationObserver","performance","_ref$userAgent","WINDOW","DOCUMENT","MUTATION_OBSERVER","PERFORMANCE","IS_BROWSER","IS_DOM","head","IS_IE","DEFAULT_REPLACEMENT_CLASS","DATA_FA_I2SVG","DATA_FA_PSEUDO_ELEMENT","HTML_CLASS_I2SVG_BASE_CLASS","TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS","PRODUCTION","PREFIX_TO_STYLE","STYLE_TO_PREFIX","LAYERS_TEXT_CLASSNAME","FONT_FAMILY_PATTERN","FONT_WEIGHT_TO_PREFIX","oneToTen","oneToTwenty","ATTRIBUTES_WATCHED_FOR_MUTATION","DUOTONE_CLASSES","GROUP","SWAP_OPACITY","PRIMARY","SECONDARY","RESERVED_CLASSES","initial","FontAwesomeConfig","querySelector","_ref","_ref2","coerce","element","getAttribute","getAttrConfig","_config","familyPrefix","replacementClass","autoReplaceSvg","autoAddCss","autoA11y","searchPseudoElements","observeMutations","mutateApproach","keepOriginalSource","measurePerformance","showMissingIcons","config","w","styles","hooks","shims","namespace","functions","domready","doScroll","listener","asyncTimer","PENDING","SETTLED","FULFILLED","REJECTED","NOOP","isNode","g","emit","asyncSetTimer","setImmediate","asyncQueue","asyncFlush","asyncCall","arg","invokeCallback","subscriber","owner","settled","_state","_data","promise","then","reject","handleThenable","resolve","resolved","fulfill","reason","publishFulfillment","publishRejection","publish","_then","_handled","notifyRejectionHandled","P","resolver","rejectPromise","invokeResolver","onFulfillment","onRejection","fulfilled","rejected","catch","promises","results","remaining","race","picked","Promise","meaninglessTransform","size","rotate","flipX","flipY","insertCss","setAttribute","headChildren","childNodes","beforeChild","child","tagName","toUpperCase","insertBefore","nextUniqueId","random","toArray","array","classArray","node","classList","getIconName","cls","parts","iconName","htmlEscape","joinStyles","reduce","acc","styleName","transformIsMeaningful","transformForSvg","containerWidth","iconWidth","outer","innerTranslate","innerScale","innerRotate","path","ALL_SPACE","fillBlack","abstract","fill","makeInlineSvgAbstract","_params$icons","icons","main","mask","symbol","maskId","titleId","extra","_params$watchable","watchable","isUploadedIcon","widthClass","attrClass","c","classes","role","uploadedIconWidthStyle","tag","explicitMaskId","mainWidth","mainPath","icon","maskWidth","maskPath","trans","maskRect","maskInnerGroupChildrenMixin","maskInnerGroup","maskOuterGroup","clipId","maskTag","maskUnits","maskContentUnits","defs","makeIconMasking","styleString","makeIconStandard","asSymbol","asIcon","makeLayersTextAbstract","_params$watchable2","_ref2$width","_ref2$height","_ref2$startCentered","startCentered","transformForCss","makeLayersCounterAbstract","noop$1","preamble","perf","subject","initialValue","thisContext","func","bindInternal4","toHex","unicode","defineIcons","_params$skipHooks","skipHooks","normalized","addPack","_byUnicode","_byLigature","_byOldName","build","lookup","reducer","o","ligatures","ligature","hasRegular","shim","oldName","byUnicode","styles$1","getCanonicalIcon","values","autoFetchSvg","rest","iconFromMapping","mapping","toHtml","abstractNodes","_abstractNodes$attrib","_abstractNodes$childr","attributeName","joinAttributes","noop$2","isWatched","mutators","mutation","newOuterHTML","parentNode","outerHTML","toLowerCase","newNode","replaceChild","nest","forSvg","RegExp","splitClasses","toSvg","toNode","newInnerHTML","performOperationSync","op","perform","mutations","callbackFunction","frame","mutator","disabled","enableObservation","mo","observe","treeCallback","nodeCallback","pseudoElementsCallback","_options$observeMutat","observeMutationsRoot","objects","mutationRecord","addedNodes","_getCanonicalIcon","childList","characterData","subtree","classParser","existingPrefix","existingIconName","innerText","parseTransformString","transformString","isNaN","parseMeta","_classParser","extraClasses","extraStyles","styleParser","transformParser","symbolParser","extraAttributes","attributesParser","maskParser","MissingIcon","message","stack","Error","FILL","ANIMATION_BASE","attributeType","repeatCount","dur","RING","OPACITY_ANIMATE","missing","cx","cy","r","styles$2","asFoundIcon","vectorData","findIcon","styles$3","generateMutation","nodeMeta","computedFontSize","fontSize","boundingClientRect","generateLayersText","generateSvgReplacementMutation","onTree","root","htmlClassList","hclAdd","suffix","hclRemove","prefixes","prefixesDomQuery","candidates","querySelectorAll","resolvedMutations","onNode","replaceForPosition","pendingAttribute","alreadyProcessedPseudoElement","fontFamily","fontWeight","removeChild","_content","hexValue","iconIdentifier","meta","firstChild","removeAttribute","processable","operations","dfp","drc","fp","rc","dPatt","customPropPatt","rPatt","ensureCss","_cssInserted","apiObject","abstractCreator","findIconDefinition","iconLookup","_iconLookup$prefix","library","definitions","Library","Constructor","_classCallCheck","protoProps","staticProps","_len","_key","additions","_pullDefinitions","definition","0","_normalized$key","dom","i2svg","_params$node","_params$callback","watch","autoReplaceSvgRoot","autoReplace","iconDefinition","_params$transform","_params$symbol","_params$mask","_params$maskId","_params$title","_params$titleId","_params$classes","_params$attributes","_params$styles","maybeIconDefinition","api","noAuto","disconnect","parse","_params$transform2","_params$title2","_params$classes2","_params$attributes2","_params$styles2","counter","_params$title3","_params$classes3","_params$attributes3","_params$styles3","layer","assembler","_params$classes4","_params$autoReplaceSv","bunker","FontAwesome","addShims","_namespace$shims","toastr","Owl","Defaults","$element","_handlers","_plugins","_supress","_current","_speed","_coordinates","_breakpoint","_width","_items","_clones","_mergers","_widths","_invalidated","_pipe","_drag","time","pointer","direction","_states","tags","handler","Plugins","plugin","Workers","priority","worker","run","setup","initialize","center","rewind","checkVisibility","mouseDrag","touchDrag","pullDrag","freeDrag","margin","stagePadding","merge","mergeFit","autoWidth","startPosition","rtl","smartSpeed","fluidSpeed","dragEndSpeed","responsive","responsiveRefreshRate","responsiveBaseElement","fallbackEasing","slideTransition","nestedItemSelector","itemElement","stageElement","refreshClass","loadedClass","loadingClass","rtlClass","responsiveClass","dragClass","itemClass","stageClass","stageOuterClass","grabClass","Width","Default","Inner","Outer","Type","Event","State","cache","relative","grid","toFixed","widths","clones","view","repeat","prepend","normalize","prependTo","coordinates","padding","minimum","maximum","begin","matches","initializeStage","initializeItems","$items","refresh","not","invalidate","imgs","nestedSelector","enter","preloadAutoWidthImages","registerEventHandlers","leave","viewport","overwrites","breakpoint","Number","property","optionsLogic","prepare","grep","dimension","onThrottledResize","resizeTimer","onResize","support","onTransitionEnd","onDragStart","onDragEnd","delta","difference","onDragMove","pull","closest","coordinate","transform3d","state","part","v","suppress","release","reciprocalItemsWidth","elementWidth","mergers","odd","even","multiplier","newPosition","factor","revert","srcElement","originalTarget","warn","nodeType","before","splice","images","Image","unwrap","removeData","capture","attachEvent","detachEvent","status","count","camelCase","relatedTarget","onTrigger","register","object","special","owl","_default","number","second","owlCarousel","option","$this","Zepto","AutoRefresh","carousel","_core","_interval","_visible","autoRefresh","autoRefreshInterval","getOwnPropertyNames","Lazy","_loaded","lazyLoad","lazyLoadEager","$elements","handlers","AutoHeight","_previousHeight","autoHeight","_intervalId","refThis","resize","autoHeightClass","lazyLoadEnabled","visible","heights","maxheight","Video","_videos","_playing","isInFullScreen","fetch","play","videoHeight","videoWidth","thumbnail","tnLink","dimensions","customTn","srcType","lazyClass","jsonp","dataType","thumbnail_large","framegrab_url","mozFullScreenElement","webkitFullscreenElement","Animate","scope","core","swapping","animateOut","animateIn","swap","animation","incoming","outgoing","Autoplay","_call","_time","_timeout","_paused","autoplayHoverPause","pause","autoplayTimeout","autoplaySpeed","_next","read","timeout","elapsed","Navigation","_initialized","_pages","_controls","_templates","_overrides","dotsData","dotClass","draw","nav","navText","navSpeed","navElement","navContainer","navContainerClass","navClass","slideBy","dotsClass","dots","dotsEach","dotsSpeed","dotsContainer","override","$relative","$previous","$next","$absolute","control","overides","lower","upper","page","getPosition","successor","standard","Hash","_hashes","URLhashListener","WebkitAnimation","MozAnimation","OAnimation","tests","prefixed","previousToast","toastId","toastType","$toastElement","clearOptions","getOptions","getContainer","clearToast","toastsToClear","clearContainer","removeToast","optionsOverride","notify","iconClass","iconClasses","subscribe","warning","containerId","positionClass","createContainer","hideMethod","hideDuration","easing","hideEasing","preventDuplicates","shouldExit","intervalId","$titleElement","$messageElement","$progressElement","$closeElement","closeHtml","progressBar","hideEta","maxHideTime","response","toastClass","escapeHtml","titleClass","setTitle","messageClass","setMessage","closeButton","closeClass","progressClass","newestOnTop","ariaValue","setAria","showMethod","showDuration","showEasing","onShown","timeOut","hideToast","updateProgress","closeOnHover","hover","stickAround","delayedHideToast","tapToDismiss","cancelBubble","onCloseClick","debug","log","method","closeMethod","closeDuration","closeEasing","onHidden","endTime","extendedTimeOut","percentage"],"mappings":"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","file":"js/plugins.js","sourcesContent":["// ==================================================\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);","/*!\n * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n(function () {\n 'use strict';\n\n function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n }\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n }\n\n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n\n function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n }\n\n function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n }\n\n function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n\n var noop = function noop() {};\n\n var _WINDOW = {};\n var _DOCUMENT = {};\n var _MUTATION_OBSERVER = null;\n var _PERFORMANCE = {\n mark: noop,\n measure: noop\n };\n\n try {\n if (typeof window !== 'undefined') _WINDOW = window;\n if (typeof document !== 'undefined') _DOCUMENT = document;\n if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\n if (typeof performance !== 'undefined') _PERFORMANCE = performance;\n } catch (e) {}\n\n var _ref = _WINDOW.navigator || {},\n _ref$userAgent = _ref.userAgent,\n userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\n\n var WINDOW = _WINDOW;\n var DOCUMENT = _DOCUMENT;\n var MUTATION_OBSERVER = _MUTATION_OBSERVER;\n var PERFORMANCE = _PERFORMANCE;\n var IS_BROWSER = !!WINDOW.document;\n var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\n var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\n var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\n var UNITS_IN_GRID = 16;\n var DEFAULT_FAMILY_PREFIX = 'fa';\n var DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\n var DATA_FA_I2SVG = 'data-fa-i2svg';\n var DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\n var DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\n var DATA_PREFIX = 'data-prefix';\n var DATA_ICON = 'data-icon';\n var HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\n var MUTATION_APPROACH_ASYNC = 'async';\n var TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\n var PRODUCTION = function () {\n try {\n return \"production\" === 'production';\n } catch (e) {\n return false;\n }\n }();\n var PREFIX_TO_STYLE = {\n 'fas': 'solid',\n 'far': 'regular',\n 'fal': 'light',\n 'fad': 'duotone',\n 'fab': 'brands',\n 'fak': 'kit',\n 'fa': 'solid'\n };\n var STYLE_TO_PREFIX = {\n 'solid': 'fas',\n 'regular': 'far',\n 'light': 'fal',\n 'duotone': 'fad',\n 'brands': 'fab',\n 'kit': 'fak'\n };\n var LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\n var FONT_FAMILY_PATTERN = /Font Awesome ([5 ]*)(Solid|Regular|Light|Duotone|Brands|Free|Pro|Kit).*/; // TODO: do we need to handle font-weight for kit SVG pseudo-elements?\n\n var FONT_WEIGHT_TO_PREFIX = {\n '900': 'fas',\n '400': 'far',\n 'normal': 'far',\n '300': 'fal'\n };\n var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\n var ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\n var DUOTONE_CLASSES = {\n GROUP: 'group',\n SWAP_OPACITY: 'swap-opacity',\n PRIMARY: 'primary',\n SECONDARY: 'secondary'\n };\n var RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'flip-both', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY].concat(oneToTen.map(function (n) {\n return \"\".concat(n, \"x\");\n })).concat(oneToTwenty.map(function (n) {\n return \"w-\".concat(n);\n }));\n\n var initial = WINDOW.FontAwesomeConfig || {};\n\n function getAttrConfig(attr) {\n var element = DOCUMENT.querySelector('script[' + attr + ']');\n\n if (element) {\n return element.getAttribute(attr);\n }\n }\n\n function coerce(val) {\n // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\n // We'll assume that this is an indication that it should be toggled to true\n // For example \n if (val === '') return true;\n if (val === 'false') return false;\n if (val === 'true') return true;\n return val;\n }\n\n if (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n attrs.forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n attr = _ref2[0],\n key = _ref2[1];\n\n var val = coerce(getAttrConfig(attr));\n\n if (val !== undefined && val !== null) {\n initial[key] = val;\n }\n });\n }\n\n var _default = {\n familyPrefix: DEFAULT_FAMILY_PREFIX,\n replacementClass: DEFAULT_REPLACEMENT_CLASS,\n autoReplaceSvg: true,\n autoAddCss: true,\n autoA11y: true,\n searchPseudoElements: false,\n observeMutations: true,\n mutateApproach: 'async',\n keepOriginalSource: true,\n measurePerformance: false,\n showMissingIcons: true\n };\n\n var _config = _objectSpread({}, _default, initial);\n\n if (!_config.autoReplaceSvg) _config.observeMutations = false;\n\n var config = _objectSpread({}, _config);\n\n WINDOW.FontAwesomeConfig = config;\n\n var w = WINDOW || {};\n if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n var namespace = w[NAMESPACE_IDENTIFIER];\n\n var functions = [];\n\n var listener = function listener() {\n DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n loaded = 1;\n functions.map(function (fn) {\n return fn();\n });\n };\n\n var loaded = false;\n\n if (IS_DOM) {\n loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n }\n\n function domready (fn) {\n if (!IS_DOM) return;\n loaded ? setTimeout(fn, 0) : functions.push(fn);\n }\n\n var PENDING = 'pending';\n var SETTLED = 'settled';\n var FULFILLED = 'fulfilled';\n var REJECTED = 'rejected';\n\n var NOOP = function NOOP() {};\n\n var isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function';\n var asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate;\n var asyncQueue = [];\n var asyncTimer;\n\n function asyncFlush() {\n // run promise callbacks\n for (var i = 0; i < asyncQueue.length; i++) {\n asyncQueue[i][0](asyncQueue[i][1]);\n } // reset async asyncQueue\n\n\n asyncQueue = [];\n asyncTimer = false;\n }\n\n function asyncCall(callback, arg) {\n asyncQueue.push([callback, arg]);\n\n if (!asyncTimer) {\n asyncTimer = true;\n asyncSetTimer(asyncFlush, 0);\n }\n }\n\n function invokeResolver(resolver, promise) {\n function resolvePromise(value) {\n resolve(promise, value);\n }\n\n function rejectPromise(reason) {\n reject(promise, reason);\n }\n\n try {\n resolver(resolvePromise, rejectPromise);\n } catch (e) {\n rejectPromise(e);\n }\n }\n\n function invokeCallback(subscriber) {\n var owner = subscriber.owner;\n var settled = owner._state;\n var value = owner._data;\n var callback = subscriber[settled];\n var promise = subscriber.then;\n\n if (typeof callback === 'function') {\n settled = FULFILLED;\n\n try {\n value = callback(value);\n } catch (e) {\n reject(promise, e);\n }\n }\n\n if (!handleThenable(promise, value)) {\n if (settled === FULFILLED) {\n resolve(promise, value);\n }\n\n if (settled === REJECTED) {\n reject(promise, value);\n }\n }\n }\n\n function handleThenable(promise, value) {\n var resolved;\n\n try {\n if (promise === value) {\n throw new TypeError('A promises callback cannot return that same promise.');\n }\n\n if (value && (typeof value === 'function' || _typeof(value) === 'object')) {\n // then should be retrieved only once\n var then = value.then;\n\n if (typeof then === 'function') {\n then.call(value, function (val) {\n if (!resolved) {\n resolved = true;\n\n if (value === val) {\n fulfill(promise, val);\n } else {\n resolve(promise, val);\n }\n }\n }, function (reason) {\n if (!resolved) {\n resolved = true;\n reject(promise, reason);\n }\n });\n return true;\n }\n }\n } catch (e) {\n if (!resolved) {\n reject(promise, e);\n }\n\n return true;\n }\n\n return false;\n }\n\n function resolve(promise, value) {\n if (promise === value || !handleThenable(promise, value)) {\n fulfill(promise, value);\n }\n }\n\n function fulfill(promise, value) {\n if (promise._state === PENDING) {\n promise._state = SETTLED;\n promise._data = value;\n asyncCall(publishFulfillment, promise);\n }\n }\n\n function reject(promise, reason) {\n if (promise._state === PENDING) {\n promise._state = SETTLED;\n promise._data = reason;\n asyncCall(publishRejection, promise);\n }\n }\n\n function publish(promise) {\n promise._then = promise._then.forEach(invokeCallback);\n }\n\n function publishFulfillment(promise) {\n promise._state = FULFILLED;\n publish(promise);\n }\n\n function publishRejection(promise) {\n promise._state = REJECTED;\n publish(promise);\n\n if (!promise._handled && isNode) {\n global.process.emit('unhandledRejection', promise._data, promise);\n }\n }\n\n function notifyRejectionHandled(promise) {\n global.process.emit('rejectionHandled', promise);\n }\n /**\n * @class\n */\n\n\n function P(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('Promise resolver ' + resolver + ' is not a function');\n }\n\n if (this instanceof P === false) {\n throw new TypeError('Failed to construct \\'Promise\\': Please use the \\'new\\' operator, this object constructor cannot be called as a function.');\n }\n\n this._then = [];\n invokeResolver(resolver, this);\n }\n\n P.prototype = {\n constructor: P,\n _state: PENDING,\n _then: null,\n _data: undefined,\n _handled: false,\n then: function then(onFulfillment, onRejection) {\n var subscriber = {\n owner: this,\n then: new this.constructor(NOOP),\n fulfilled: onFulfillment,\n rejected: onRejection\n };\n\n if ((onRejection || onFulfillment) && !this._handled) {\n this._handled = true;\n\n if (this._state === REJECTED && isNode) {\n asyncCall(notifyRejectionHandled, this);\n }\n }\n\n if (this._state === FULFILLED || this._state === REJECTED) {\n // already resolved, call callback async\n asyncCall(invokeCallback, subscriber);\n } else {\n // subscribe\n this._then.push(subscriber);\n }\n\n return subscriber.then;\n },\n catch: function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n };\n\n P.all = function (promises) {\n if (!Array.isArray(promises)) {\n throw new TypeError('You must pass an array to Promise.all().');\n }\n\n return new P(function (resolve, reject) {\n var results = [];\n var remaining = 0;\n\n function resolver(index) {\n remaining++;\n return function (value) {\n results[index] = value;\n\n if (! --remaining) {\n resolve(results);\n }\n };\n }\n\n for (var i = 0, promise; i < promises.length; i++) {\n promise = promises[i];\n\n if (promise && typeof promise.then === 'function') {\n promise.then(resolver(i), reject);\n } else {\n results[i] = promise;\n }\n }\n\n if (!remaining) {\n resolve(results);\n }\n });\n };\n\n P.race = function (promises) {\n if (!Array.isArray(promises)) {\n throw new TypeError('You must pass an array to Promise.race().');\n }\n\n return new P(function (resolve, reject) {\n for (var i = 0, promise; i < promises.length; i++) {\n promise = promises[i];\n\n if (promise && typeof promise.then === 'function') {\n promise.then(resolve, reject);\n } else {\n resolve(promise);\n }\n }\n });\n };\n\n P.resolve = function (value) {\n if (value && _typeof(value) === 'object' && value.constructor === P) {\n return value;\n }\n\n return new P(function (resolve) {\n resolve(value);\n });\n };\n\n P.reject = function (reason) {\n return new P(function (resolve, reject) {\n reject(reason);\n });\n };\n\n var picked = typeof Promise === 'function' ? Promise : P;\n\n var d = UNITS_IN_GRID;\n var meaninglessTransform = {\n size: 16,\n x: 0,\n y: 0,\n rotate: 0,\n flipX: false,\n flipY: false\n };\n\n function isReserved(name) {\n return ~RESERVED_CLASSES.indexOf(name);\n }\n\n function bunker(fn) {\n try {\n fn();\n } catch (e) {\n if (!PRODUCTION) {\n throw e;\n }\n }\n }\n function insertCss(css) {\n if (!css || !IS_DOM) {\n return;\n }\n\n var style = DOCUMENT.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n var headChildren = DOCUMENT.head.childNodes;\n var beforeChild = null;\n\n for (var i = headChildren.length - 1; i > -1; i--) {\n var child = headChildren[i];\n var tagName = (child.tagName || '').toUpperCase();\n\n if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n beforeChild = child;\n }\n }\n\n DOCUMENT.head.insertBefore(style, beforeChild);\n return css;\n }\n var idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n function nextUniqueId() {\n var size = 12;\n var id = '';\n\n while (size-- > 0) {\n id += idPool[Math.random() * 62 | 0];\n }\n\n return id;\n }\n function toArray(obj) {\n var array = [];\n\n for (var i = (obj || []).length >>> 0; i--;) {\n array[i] = obj[i];\n }\n\n return array;\n }\n function classArray(node) {\n if (node.classList) {\n return toArray(node.classList);\n } else {\n return (node.getAttribute('class') || '').split(' ').filter(function (i) {\n return i;\n });\n }\n }\n function getIconName(familyPrefix, cls) {\n var parts = cls.split('-');\n var prefix = parts[0];\n var iconName = parts.slice(1).join('-');\n\n if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) {\n return iconName;\n } else {\n return null;\n }\n }\n function htmlEscape(str) {\n return \"\".concat(str).replace(/&/g, '&').replace(/\"/g, '"').replace(/'/g, ''').replace(//g, '>');\n }\n function joinAttributes(attributes) {\n return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\n return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n }, '').trim();\n }\n function joinStyles(styles) {\n return Object.keys(styles || {}).reduce(function (acc, styleName) {\n return acc + \"\".concat(styleName, \": \").concat(styles[styleName], \";\");\n }, '');\n }\n function transformIsMeaningful(transform) {\n return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n }\n function transformForSvg(_ref) {\n var transform = _ref.transform,\n containerWidth = _ref.containerWidth,\n iconWidth = _ref.iconWidth;\n var outer = {\n transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n };\n var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n var inner = {\n transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n };\n var path = {\n transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n };\n return {\n outer: outer,\n inner: inner,\n path: path\n };\n }\n function transformForCss(_ref2) {\n var transform = _ref2.transform,\n _ref2$width = _ref2.width,\n width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\n _ref2$height = _ref2.height,\n height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\n _ref2$startCentered = _ref2.startCentered,\n startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\n var val = '';\n\n if (startCentered && IS_IE) {\n val += \"translate(\".concat(transform.x / d - width / 2, \"em, \").concat(transform.y / d - height / 2, \"em) \");\n } else if (startCentered) {\n val += \"translate(calc(-50% + \".concat(transform.x / d, \"em), calc(-50% + \").concat(transform.y / d, \"em)) \");\n } else {\n val += \"translate(\".concat(transform.x / d, \"em, \").concat(transform.y / d, \"em) \");\n }\n\n val += \"scale(\".concat(transform.size / d * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d * (transform.flipY ? -1 : 1), \") \");\n val += \"rotate(\".concat(transform.rotate, \"deg) \");\n return val;\n }\n\n var ALL_SPACE = {\n x: 0,\n y: 0,\n width: '100%',\n height: '100%'\n };\n\n function fillBlack(abstract) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (abstract.attributes && (abstract.attributes.fill || force)) {\n abstract.attributes.fill = 'black';\n }\n\n return abstract;\n }\n\n function deGroup(abstract) {\n if (abstract.tag === 'g') {\n return abstract.children;\n } else {\n return [abstract];\n }\n }\n\n function makeIconMasking (_ref) {\n var children = _ref.children,\n attributes = _ref.attributes,\n main = _ref.main,\n mask = _ref.mask,\n explicitMaskId = _ref.maskId,\n transform = _ref.transform;\n var mainWidth = main.width,\n mainPath = main.icon;\n var maskWidth = mask.width,\n maskPath = mask.icon;\n var trans = transformForSvg({\n transform: transform,\n containerWidth: maskWidth,\n iconWidth: mainWidth\n });\n var maskRect = {\n tag: 'rect',\n attributes: _objectSpread({}, ALL_SPACE, {\n fill: 'white'\n })\n };\n var maskInnerGroupChildrenMixin = mainPath.children ? {\n children: mainPath.children.map(fillBlack)\n } : {};\n var maskInnerGroup = {\n tag: 'g',\n attributes: _objectSpread({}, trans.inner),\n children: [fillBlack(_objectSpread({\n tag: mainPath.tag,\n attributes: _objectSpread({}, mainPath.attributes, trans.path)\n }, maskInnerGroupChildrenMixin))]\n };\n var maskOuterGroup = {\n tag: 'g',\n attributes: _objectSpread({}, trans.outer),\n children: [maskInnerGroup]\n };\n var maskId = \"mask-\".concat(explicitMaskId || nextUniqueId());\n var clipId = \"clip-\".concat(explicitMaskId || nextUniqueId());\n var maskTag = {\n tag: 'mask',\n attributes: _objectSpread({}, ALL_SPACE, {\n id: maskId,\n maskUnits: 'userSpaceOnUse',\n maskContentUnits: 'userSpaceOnUse'\n }),\n children: [maskRect, maskOuterGroup]\n };\n var defs = {\n tag: 'defs',\n children: [{\n tag: 'clipPath',\n attributes: {\n id: clipId\n },\n children: deGroup(maskPath)\n }, maskTag]\n };\n children.push(defs, {\n tag: 'rect',\n attributes: _objectSpread({\n fill: 'currentColor',\n 'clip-path': \"url(#\".concat(clipId, \")\"),\n mask: \"url(#\".concat(maskId, \")\")\n }, ALL_SPACE)\n });\n return {\n children: children,\n attributes: attributes\n };\n }\n\n function makeIconStandard (_ref) {\n var children = _ref.children,\n attributes = _ref.attributes,\n main = _ref.main,\n transform = _ref.transform,\n styles = _ref.styles;\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n if (transformIsMeaningful(transform)) {\n var trans = transformForSvg({\n transform: transform,\n containerWidth: main.width,\n iconWidth: main.width\n });\n children.push({\n tag: 'g',\n attributes: _objectSpread({}, trans.outer),\n children: [{\n tag: 'g',\n attributes: _objectSpread({}, trans.inner),\n children: [{\n tag: main.icon.tag,\n children: main.icon.children,\n attributes: _objectSpread({}, main.icon.attributes, trans.path)\n }]\n }]\n });\n } else {\n children.push(main.icon);\n }\n\n return {\n children: children,\n attributes: attributes\n };\n }\n\n function asIcon (_ref) {\n var children = _ref.children,\n main = _ref.main,\n mask = _ref.mask,\n attributes = _ref.attributes,\n styles = _ref.styles,\n transform = _ref.transform;\n\n if (transformIsMeaningful(transform) && main.found && !mask.found) {\n var width = main.width,\n height = main.height;\n var offset = {\n x: width / height / 2,\n y: 0.5\n };\n attributes['style'] = joinStyles(_objectSpread({}, styles, {\n 'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n }));\n }\n\n return [{\n tag: 'svg',\n attributes: attributes,\n children: children\n }];\n }\n\n function asSymbol (_ref) {\n var prefix = _ref.prefix,\n iconName = _ref.iconName,\n children = _ref.children,\n attributes = _ref.attributes,\n symbol = _ref.symbol;\n var id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.familyPrefix, \"-\").concat(iconName) : symbol;\n return [{\n tag: 'svg',\n attributes: {\n style: 'display: none;'\n },\n children: [{\n tag: 'symbol',\n attributes: _objectSpread({}, attributes, {\n id: id\n }),\n children: children\n }]\n }];\n }\n\n function makeInlineSvgAbstract(params) {\n var _params$icons = params.icons,\n main = _params$icons.main,\n mask = _params$icons.mask,\n prefix = params.prefix,\n iconName = params.iconName,\n transform = params.transform,\n symbol = params.symbol,\n title = params.title,\n maskId = params.maskId,\n titleId = params.titleId,\n extra = params.extra,\n _params$watchable = params.watchable,\n watchable = _params$watchable === void 0 ? false : _params$watchable;\n\n var _ref = mask.found ? mask : main,\n width = _ref.width,\n height = _ref.height;\n\n var isUploadedIcon = prefix === 'fak';\n var widthClass = isUploadedIcon ? '' : \"fa-w-\".concat(Math.ceil(width / height * 16));\n var attrClass = [config.replacementClass, iconName ? \"\".concat(config.familyPrefix, \"-\").concat(iconName) : '', widthClass].filter(function (c) {\n return extra.classes.indexOf(c) === -1;\n }).filter(function (c) {\n return c !== '' || !!c;\n }).concat(extra.classes).join(' ');\n var content = {\n children: [],\n attributes: _objectSpread({}, extra.attributes, {\n 'data-prefix': prefix,\n 'data-icon': iconName,\n 'class': attrClass,\n 'role': extra.attributes.role || 'img',\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n })\n };\n var uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? {\n width: \"\".concat(width / height * 16 * 0.0625, \"em\")\n } : {};\n\n if (watchable) {\n content.attributes[DATA_FA_I2SVG] = '';\n }\n\n if (title) content.children.push({\n tag: 'title',\n attributes: {\n id: content.attributes['aria-labelledby'] || \"title-\".concat(titleId || nextUniqueId())\n },\n children: [title]\n });\n\n var args = _objectSpread({}, content, {\n prefix: prefix,\n iconName: iconName,\n main: main,\n mask: mask,\n maskId: maskId,\n transform: transform,\n symbol: symbol,\n styles: _objectSpread({}, uploadedIconWidthStyle, extra.styles)\n });\n\n var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args),\n children = _ref2.children,\n attributes = _ref2.attributes;\n\n args.children = children;\n args.attributes = attributes;\n\n if (symbol) {\n return asSymbol(args);\n } else {\n return asIcon(args);\n }\n }\n function makeLayersTextAbstract(params) {\n var content = params.content,\n width = params.width,\n height = params.height,\n transform = params.transform,\n title = params.title,\n extra = params.extra,\n _params$watchable2 = params.watchable,\n watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\n\n var attributes = _objectSpread({}, extra.attributes, title ? {\n 'title': title\n } : {}, {\n 'class': extra.classes.join(' ')\n });\n\n if (watchable) {\n attributes[DATA_FA_I2SVG] = '';\n }\n\n var styles = _objectSpread({}, extra.styles);\n\n if (transformIsMeaningful(transform)) {\n styles['transform'] = transformForCss({\n transform: transform,\n startCentered: true,\n width: width,\n height: height\n });\n styles['-webkit-transform'] = styles['transform'];\n }\n\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n }\n function makeLayersCounterAbstract(params) {\n var content = params.content,\n title = params.title,\n extra = params.extra;\n\n var attributes = _objectSpread({}, extra.attributes, title ? {\n 'title': title\n } : {}, {\n 'class': extra.classes.join(' ')\n });\n\n var styleString = joinStyles(extra.styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n }\n\n var noop$1 = function noop() {};\n\n var p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n mark: noop$1,\n measure: noop$1\n };\n var preamble = \"FA \\\"5.15.3\\\"\";\n\n var begin = function begin(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n return function () {\n return end(name);\n };\n };\n\n var end = function end(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n p.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n };\n\n var perf = {\n begin: begin,\n end: end\n };\n\n /**\n * Internal helper to bind a function known to have 4 arguments\n * to a given context.\n */\n\n var bindInternal4 = function bindInternal4(func, thisContext) {\n return function (a, b, c, d) {\n return func.call(thisContext, a, b, c, d);\n };\n };\n\n /**\n * # Reduce\n *\n * A fast object `.reduce()` implementation.\n *\n * @param {Object} subject The object to reduce over.\n * @param {Function} fn The reducer function.\n * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0].\n * @param {Object} thisContext The context for the reducer.\n * @return {mixed} The final result.\n */\n\n\n var reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n var keys = Object.keys(subject),\n length = keys.length,\n iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n i,\n key,\n result;\n\n if (initialValue === undefined) {\n i = 1;\n result = subject[keys[0]];\n } else {\n i = 0;\n result = initialValue;\n }\n\n for (; i < length; i++) {\n key = keys[i];\n result = iterator(result, subject[key], key, subject);\n }\n\n return result;\n };\n\n function toHex(unicode) {\n var result = '';\n\n for (var i = 0; i < unicode.length; i++) {\n var hex = unicode.charCodeAt(i).toString(16);\n result += ('000' + hex).slice(-4);\n }\n\n return result;\n }\n\n function defineIcons(prefix, icons) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _params$skipHooks = params.skipHooks,\n skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n var normalized = Object.keys(icons).reduce(function (acc, iconName) {\n var icon = icons[iconName];\n var expanded = !!icon.icon;\n\n if (expanded) {\n acc[icon.iconName] = icon.icon;\n } else {\n acc[iconName] = icon;\n }\n\n return acc;\n }, {});\n\n if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n namespace.hooks.addPack(prefix, normalized);\n } else {\n namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized);\n }\n /**\n * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n * for `fas` so we'll easy the upgrade process for our users by automatically defining\n * this as well.\n */\n\n\n if (prefix === 'fas') {\n defineIcons('fa', icons);\n }\n }\n\n var styles = namespace.styles,\n shims = namespace.shims;\n var _byUnicode = {};\n var _byLigature = {};\n var _byOldName = {};\n var build = function build() {\n var lookup = function lookup(reducer) {\n return reduce(styles, function (o, style, prefix) {\n o[prefix] = reduce(style, reducer, {});\n return o;\n }, {});\n };\n\n _byUnicode = lookup(function (acc, icon, iconName) {\n if (icon[3]) {\n acc[icon[3]] = iconName;\n }\n\n return acc;\n });\n _byLigature = lookup(function (acc, icon, iconName) {\n var ligatures = icon[2];\n acc[iconName] = iconName;\n ligatures.forEach(function (ligature) {\n acc[ligature] = iconName;\n });\n return acc;\n });\n var hasRegular = 'far' in styles;\n _byOldName = reduce(shims, function (acc, shim) {\n var oldName = shim[0];\n var prefix = shim[1];\n var iconName = shim[2];\n\n if (prefix === 'far' && !hasRegular) {\n prefix = 'fas';\n }\n\n acc[oldName] = {\n prefix: prefix,\n iconName: iconName\n };\n return acc;\n }, {});\n };\n build();\n function byUnicode(prefix, unicode) {\n return (_byUnicode[prefix] || {})[unicode];\n }\n function byLigature(prefix, ligature) {\n return (_byLigature[prefix] || {})[ligature];\n }\n function byOldName(name) {\n return _byOldName[name] || {\n prefix: null,\n iconName: null\n };\n }\n\n var styles$1 = namespace.styles;\n var emptyCanonicalIcon = function emptyCanonicalIcon() {\n return {\n prefix: null,\n iconName: null,\n rest: []\n };\n };\n function getCanonicalIcon(values) {\n return values.reduce(function (acc, cls) {\n var iconName = getIconName(config.familyPrefix, cls);\n\n if (styles$1[cls]) {\n acc.prefix = cls;\n } else if (config.autoFetchSvg && Object.keys(PREFIX_TO_STYLE).indexOf(cls) > -1) {\n acc.prefix = cls;\n } else if (iconName) {\n var shim = acc.prefix === 'fa' ? byOldName(iconName) : {};\n acc.iconName = shim.iconName || iconName;\n acc.prefix = shim.prefix || acc.prefix;\n } else if (cls !== config.replacementClass && cls.indexOf('fa-w-') !== 0) {\n acc.rest.push(cls);\n }\n\n return acc;\n }, emptyCanonicalIcon());\n }\n function iconFromMapping(mapping, prefix, iconName) {\n if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n return {\n prefix: prefix,\n iconName: iconName,\n icon: mapping[prefix][iconName]\n };\n }\n }\n\n function toHtml(abstractNodes) {\n var tag = abstractNodes.tag,\n _abstractNodes$attrib = abstractNodes.attributes,\n attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\n _abstractNodes$childr = abstractNodes.children,\n children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\n\n if (typeof abstractNodes === 'string') {\n return htmlEscape(abstractNodes);\n } else {\n return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"\");\n }\n }\n\n var noop$2 = function noop() {};\n\n function isWatched(node) {\n var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n return typeof i2svg === 'string';\n }\n\n function getMutator() {\n if (config.autoReplaceSvg === true) {\n return mutators.replace;\n }\n\n var mutator = mutators[config.autoReplaceSvg];\n return mutator || mutators.replace;\n }\n\n var mutators = {\n replace: function replace(mutation) {\n var node = mutation[0];\n var abstract = mutation[1];\n var newOuterHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n\n if (node.parentNode && node.outerHTML) {\n node.outerHTML = newOuterHTML + (config.keepOriginalSource && node.tagName.toLowerCase() !== 'svg' ? \"\") : '');\n } else if (node.parentNode) {\n var newNode = document.createElement('span');\n node.parentNode.replaceChild(newNode, node);\n newNode.outerHTML = newOuterHTML;\n }\n },\n nest: function nest(mutation) {\n var node = mutation[0];\n var abstract = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.\n // Short-circuit to the standard replacement\n\n if (~classArray(node).indexOf(config.replacementClass)) {\n return mutators.replace(mutation);\n }\n\n var forSvg = new RegExp(\"\".concat(config.familyPrefix, \"-.*\"));\n delete abstract[0].attributes.style;\n delete abstract[0].attributes.id;\n var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) {\n if (cls === config.replacementClass || cls.match(forSvg)) {\n acc.toSvg.push(cls);\n } else {\n acc.toNode.push(cls);\n }\n\n return acc;\n }, {\n toNode: [],\n toSvg: []\n });\n abstract[0].attributes.class = splitClasses.toSvg.join(' ');\n var newInnerHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n node.setAttribute('class', splitClasses.toNode.join(' '));\n node.setAttribute(DATA_FA_I2SVG, '');\n node.innerHTML = newInnerHTML;\n }\n };\n\n function performOperationSync(op) {\n op();\n }\n\n function perform(mutations, callback) {\n var callbackFunction = typeof callback === 'function' ? callback : noop$2;\n\n if (mutations.length === 0) {\n callbackFunction();\n } else {\n var frame = performOperationSync;\n\n if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n frame = WINDOW.requestAnimationFrame || performOperationSync;\n }\n\n frame(function () {\n var mutator = getMutator();\n var mark = perf.begin('mutate');\n mutations.map(mutator);\n mark();\n callbackFunction();\n });\n }\n }\n var disabled = false;\n function disableObservation() {\n disabled = true;\n }\n function enableObservation() {\n disabled = false;\n }\n var mo = null;\n function observe(options) {\n if (!MUTATION_OBSERVER) {\n return;\n }\n\n if (!config.observeMutations) {\n return;\n }\n\n var treeCallback = options.treeCallback,\n nodeCallback = options.nodeCallback,\n pseudoElementsCallback = options.pseudoElementsCallback,\n _options$observeMutat = options.observeMutationsRoot,\n observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\n mo = new MUTATION_OBSERVER(function (objects) {\n if (disabled) return;\n toArray(objects).forEach(function (mutationRecord) {\n if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n if (config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target);\n }\n\n treeCallback(mutationRecord.target);\n }\n\n if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target.parentNode);\n }\n\n if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n if (mutationRecord.attributeName === 'class') {\n var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\n prefix = _getCanonicalIcon.prefix,\n iconName = _getCanonicalIcon.iconName;\n\n if (prefix) mutationRecord.target.setAttribute('data-prefix', prefix);\n if (iconName) mutationRecord.target.setAttribute('data-icon', iconName);\n } else {\n nodeCallback(mutationRecord.target);\n }\n }\n });\n });\n if (!IS_DOM) return;\n mo.observe(observeMutationsRoot, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true\n });\n }\n function disconnect() {\n if (!mo) return;\n mo.disconnect();\n }\n\n function styleParser (node) {\n var style = node.getAttribute('style');\n var val = [];\n\n if (style) {\n val = style.split(';').reduce(function (acc, style) {\n var styles = style.split(':');\n var prop = styles[0];\n var value = styles.slice(1);\n\n if (prop && value.length > 0) {\n acc[prop] = value.join(':').trim();\n }\n\n return acc;\n }, {});\n }\n\n return val;\n }\n\n function classParser (node) {\n var existingPrefix = node.getAttribute('data-prefix');\n var existingIconName = node.getAttribute('data-icon');\n var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n var val = getCanonicalIcon(classArray(node));\n\n if (existingPrefix && existingIconName) {\n val.prefix = existingPrefix;\n val.iconName = existingIconName;\n }\n\n if (val.prefix && innerText.length > 1) {\n val.iconName = byLigature(val.prefix, node.innerText);\n } else if (val.prefix && innerText.length === 1) {\n val.iconName = byUnicode(val.prefix, toHex(node.innerText));\n }\n\n return val;\n }\n\n var parseTransformString = function parseTransformString(transformString) {\n var transform = {\n size: 16,\n x: 0,\n y: 0,\n flipX: false,\n flipY: false,\n rotate: 0\n };\n\n if (!transformString) {\n return transform;\n } else {\n return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\n var parts = n.toLowerCase().split('-');\n var first = parts[0];\n var rest = parts.slice(1).join('-');\n\n if (first && rest === 'h') {\n acc.flipX = true;\n return acc;\n }\n\n if (first && rest === 'v') {\n acc.flipY = true;\n return acc;\n }\n\n rest = parseFloat(rest);\n\n if (isNaN(rest)) {\n return acc;\n }\n\n switch (first) {\n case 'grow':\n acc.size = acc.size + rest;\n break;\n\n case 'shrink':\n acc.size = acc.size - rest;\n break;\n\n case 'left':\n acc.x = acc.x - rest;\n break;\n\n case 'right':\n acc.x = acc.x + rest;\n break;\n\n case 'up':\n acc.y = acc.y - rest;\n break;\n\n case 'down':\n acc.y = acc.y + rest;\n break;\n\n case 'rotate':\n acc.rotate = acc.rotate + rest;\n break;\n }\n\n return acc;\n }, transform);\n }\n };\n function transformParser (node) {\n return parseTransformString(node.getAttribute('data-fa-transform'));\n }\n\n function symbolParser (node) {\n var symbol = node.getAttribute('data-fa-symbol');\n return symbol === null ? false : symbol === '' ? true : symbol;\n }\n\n function attributesParser (node) {\n var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\n if (acc.name !== 'class' && acc.name !== 'style') {\n acc[attr.name] = attr.value;\n }\n\n return acc;\n }, {});\n var title = node.getAttribute('title');\n var titleId = node.getAttribute('data-fa-title-id');\n\n if (config.autoA11y) {\n if (title) {\n extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n } else {\n extraAttributes['aria-hidden'] = 'true';\n extraAttributes['focusable'] = 'false';\n }\n }\n\n return extraAttributes;\n }\n\n function maskParser (node) {\n var mask = node.getAttribute('data-fa-mask');\n\n if (!mask) {\n return emptyCanonicalIcon();\n } else {\n return getCanonicalIcon(mask.split(' ').map(function (i) {\n return i.trim();\n }));\n }\n }\n\n function blankMeta() {\n return {\n iconName: null,\n title: null,\n titleId: null,\n prefix: null,\n transform: meaninglessTransform,\n symbol: false,\n mask: null,\n maskId: null,\n extra: {\n classes: [],\n styles: {},\n attributes: {}\n }\n };\n }\n function parseMeta(node) {\n var _classParser = classParser(node),\n iconName = _classParser.iconName,\n prefix = _classParser.prefix,\n extraClasses = _classParser.rest;\n\n var extraStyles = styleParser(node);\n var transform = transformParser(node);\n var symbol = symbolParser(node);\n var extraAttributes = attributesParser(node);\n var mask = maskParser(node);\n return {\n iconName: iconName,\n title: node.getAttribute('title'),\n titleId: node.getAttribute('data-fa-title-id'),\n prefix: prefix,\n transform: transform,\n symbol: symbol,\n mask: mask,\n maskId: node.getAttribute('data-fa-mask-id'),\n extra: {\n classes: extraClasses,\n styles: extraStyles,\n attributes: extraAttributes\n }\n };\n }\n\n function MissingIcon(error) {\n this.name = 'MissingIcon';\n this.message = error || 'Icon unavailable';\n this.stack = new Error().stack;\n }\n MissingIcon.prototype = Object.create(Error.prototype);\n MissingIcon.prototype.constructor = MissingIcon;\n\n var FILL = {\n fill: 'currentColor'\n };\n var ANIMATION_BASE = {\n attributeType: 'XML',\n repeatCount: 'indefinite',\n dur: '2s'\n };\n var RING = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n })\n };\n\n var OPACITY_ANIMATE = _objectSpread({}, ANIMATION_BASE, {\n attributeName: 'opacity'\n });\n\n var DOT = {\n tag: 'circle',\n attributes: _objectSpread({}, FILL, {\n cx: '256',\n cy: '364',\n r: '28'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, ANIMATION_BASE, {\n attributeName: 'r',\n values: '28;14;28;28;14;28;'\n })\n }, {\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '1;0;1;1;0;1;'\n })\n }]\n };\n var QUESTION = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n opacity: '1',\n d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '1;0;0;0;0;1;'\n })\n }]\n };\n var EXCLAMATION = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n opacity: '0',\n d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '0;0;1;1;0;0;'\n })\n }]\n };\n var missing = {\n tag: 'g',\n children: [RING, DOT, QUESTION, EXCLAMATION]\n };\n\n var styles$2 = namespace.styles;\n function asFoundIcon(icon) {\n var width = icon[0];\n var height = icon[1];\n\n var _icon$slice = icon.slice(4),\n _icon$slice2 = _slicedToArray(_icon$slice, 1),\n vectorData = _icon$slice2[0];\n\n var element = null;\n\n if (Array.isArray(vectorData)) {\n element = {\n tag: 'g',\n attributes: {\n class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.GROUP)\n },\n children: [{\n tag: 'path',\n attributes: {\n class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.SECONDARY),\n fill: 'currentColor',\n d: vectorData[0]\n }\n }, {\n tag: 'path',\n attributes: {\n class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.PRIMARY),\n fill: 'currentColor',\n d: vectorData[1]\n }\n }]\n };\n } else {\n element = {\n tag: 'path',\n attributes: {\n fill: 'currentColor',\n d: vectorData\n }\n };\n }\n\n return {\n found: true,\n width: width,\n height: height,\n icon: element\n };\n }\n function findIcon(iconName, prefix) {\n return new picked(function (resolve, reject) {\n var val = {\n found: false,\n width: 512,\n height: 512,\n icon: missing\n };\n\n if (iconName && prefix && styles$2[prefix] && styles$2[prefix][iconName]) {\n var icon = styles$2[prefix][iconName];\n return resolve(asFoundIcon(icon));\n }\n\n if (iconName && prefix && !config.showMissingIcons) {\n reject(new MissingIcon(\"Icon is missing for prefix \".concat(prefix, \" with icon name \").concat(iconName)));\n } else {\n resolve(val);\n }\n });\n }\n\n var styles$3 = namespace.styles;\n\n function generateSvgReplacementMutation(node, nodeMeta) {\n var iconName = nodeMeta.iconName,\n title = nodeMeta.title,\n titleId = nodeMeta.titleId,\n prefix = nodeMeta.prefix,\n transform = nodeMeta.transform,\n symbol = nodeMeta.symbol,\n mask = nodeMeta.mask,\n maskId = nodeMeta.maskId,\n extra = nodeMeta.extra;\n return new picked(function (resolve, reject) {\n picked.all([findIcon(iconName, prefix), findIcon(mask.iconName, mask.prefix)]).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n main = _ref2[0],\n mask = _ref2[1];\n\n resolve([node, makeInlineSvgAbstract({\n icons: {\n main: main,\n mask: mask\n },\n prefix: prefix,\n iconName: iconName,\n transform: transform,\n symbol: symbol,\n mask: mask,\n maskId: maskId,\n title: title,\n titleId: titleId,\n extra: extra,\n watchable: true\n })]);\n });\n });\n }\n\n function generateLayersText(node, nodeMeta) {\n var title = nodeMeta.title,\n transform = nodeMeta.transform,\n extra = nodeMeta.extra;\n var width = null;\n var height = null;\n\n if (IS_IE) {\n var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n var boundingClientRect = node.getBoundingClientRect();\n width = boundingClientRect.width / computedFontSize;\n height = boundingClientRect.height / computedFontSize;\n }\n\n if (config.autoA11y && !title) {\n extra.attributes['aria-hidden'] = 'true';\n }\n\n return picked.resolve([node, makeLayersTextAbstract({\n content: node.innerHTML,\n width: width,\n height: height,\n transform: transform,\n title: title,\n extra: extra,\n watchable: true\n })]);\n }\n\n function generateMutation(node) {\n var nodeMeta = parseMeta(node);\n\n if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n return generateLayersText(node, nodeMeta);\n } else {\n return generateSvgReplacementMutation(node, nodeMeta);\n }\n }\n\n function onTree(root) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (!IS_DOM) return;\n var htmlClassList = DOCUMENT.documentElement.classList;\n\n var hclAdd = function hclAdd(suffix) {\n return htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var hclRemove = function hclRemove(suffix) {\n return htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var prefixes = config.autoFetchSvg ? Object.keys(PREFIX_TO_STYLE) : Object.keys(styles$3);\n var prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(function (p) {\n return \".\".concat(p, \":not([\").concat(DATA_FA_I2SVG, \"])\");\n })).join(', ');\n\n if (prefixesDomQuery.length === 0) {\n return;\n }\n\n var candidates = [];\n\n try {\n candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n } catch (e) {// noop\n }\n\n if (candidates.length > 0) {\n hclAdd('pending');\n hclRemove('complete');\n } else {\n return;\n }\n\n var mark = perf.begin('onTree');\n var mutations = candidates.reduce(function (acc, node) {\n try {\n var mutation = generateMutation(node);\n\n if (mutation) {\n acc.push(mutation);\n }\n } catch (e) {\n if (!PRODUCTION) {\n if (e instanceof MissingIcon) {\n console.error(e);\n }\n }\n }\n\n return acc;\n }, []);\n return new picked(function (resolve, reject) {\n picked.all(mutations).then(function (resolvedMutations) {\n perform(resolvedMutations, function () {\n hclAdd('active');\n hclAdd('complete');\n hclRemove('pending');\n if (typeof callback === 'function') callback();\n mark();\n resolve();\n });\n }).catch(function () {\n mark();\n reject();\n });\n });\n }\n function onNode(node) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n generateMutation(node).then(function (mutation) {\n if (mutation) {\n perform([mutation], callback);\n }\n });\n }\n\n function replaceForPosition(node, position) {\n var pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n return new picked(function (resolve, reject) {\n if (node.getAttribute(pendingAttribute) !== null) {\n // This node is already being processed\n return resolve();\n }\n\n var children = toArray(node.children);\n var alreadyProcessedPseudoElement = children.filter(function (c) {\n return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\n })[0];\n var styles = WINDOW.getComputedStyle(node, position);\n var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);\n var fontWeight = styles.getPropertyValue('font-weight');\n var content = styles.getPropertyValue('content');\n\n if (alreadyProcessedPseudoElement && !fontFamily) {\n // If we've already processed it but the current computed style does not result in a font-family,\n // that probably means that a class name that was previously present to make the icon has been\n // removed. So we now should delete the icon.\n node.removeChild(alreadyProcessedPseudoElement);\n return resolve();\n } else if (fontFamily && content !== 'none' && content !== '') {\n var _content = styles.getPropertyValue('content');\n\n var prefix = ~['Solid', 'Regular', 'Light', 'Duotone', 'Brands', 'Kit'].indexOf(fontFamily[2]) ? STYLE_TO_PREFIX[fontFamily[2].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[fontWeight];\n var hexValue = toHex(_content.length === 3 ? _content.substr(1, 1) : _content);\n var iconName = byUnicode(prefix, hexValue);\n var iconIdentifier = iconName; // Only convert the pseudo element in this :before/:after position into an icon if we haven't\n // already done so with the same prefix and iconName\n\n if (iconName && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n node.setAttribute(pendingAttribute, iconIdentifier);\n\n if (alreadyProcessedPseudoElement) {\n // Delete the old one, since we're replacing it with a new one\n node.removeChild(alreadyProcessedPseudoElement);\n }\n\n var meta = blankMeta();\n var extra = meta.extra;\n extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n findIcon(iconName, prefix).then(function (main) {\n var abstract = makeInlineSvgAbstract(_objectSpread({}, meta, {\n icons: {\n main: main,\n mask: emptyCanonicalIcon()\n },\n prefix: prefix,\n iconName: iconIdentifier,\n extra: extra,\n watchable: true\n }));\n var element = DOCUMENT.createElement('svg');\n\n if (position === ':before') {\n node.insertBefore(element, node.firstChild);\n } else {\n node.appendChild(element);\n }\n\n element.outerHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n node.removeAttribute(pendingAttribute);\n resolve();\n }).catch(reject);\n } else {\n resolve();\n }\n } else {\n resolve();\n }\n });\n }\n\n function replace(node) {\n return picked.all([replaceForPosition(node, ':before'), replaceForPosition(node, ':after')]);\n }\n\n function processable(node) {\n return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n }\n\n function searchPseudoElements (root) {\n if (!IS_DOM) return;\n return new picked(function (resolve, reject) {\n var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n var end = perf.begin('searchPseudoElements');\n disableObservation();\n picked.all(operations).then(function () {\n end();\n enableObservation();\n resolve();\n }).catch(function () {\n end();\n enableObservation();\n reject();\n });\n });\n }\n\n var baseStyles = \"svg:not(:root).svg-inline--fa{overflow:visible}.svg-inline--fa{display:inline-block;font-size:inherit;height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-lg{vertical-align:-.225em}.svg-inline--fa.fa-w-1{width:.0625em}.svg-inline--fa.fa-w-2{width:.125em}.svg-inline--fa.fa-w-3{width:.1875em}.svg-inline--fa.fa-w-4{width:.25em}.svg-inline--fa.fa-w-5{width:.3125em}.svg-inline--fa.fa-w-6{width:.375em}.svg-inline--fa.fa-w-7{width:.4375em}.svg-inline--fa.fa-w-8{width:.5em}.svg-inline--fa.fa-w-9{width:.5625em}.svg-inline--fa.fa-w-10{width:.625em}.svg-inline--fa.fa-w-11{width:.6875em}.svg-inline--fa.fa-w-12{width:.75em}.svg-inline--fa.fa-w-13{width:.8125em}.svg-inline--fa.fa-w-14{width:.875em}.svg-inline--fa.fa-w-15{width:.9375em}.svg-inline--fa.fa-w-16{width:1em}.svg-inline--fa.fa-w-17{width:1.0625em}.svg-inline--fa.fa-w-18{width:1.125em}.svg-inline--fa.fa-w-19{width:1.1875em}.svg-inline--fa.fa-w-20{width:1.25em}.svg-inline--fa.fa-pull-left{margin-right:.3em;width:auto}.svg-inline--fa.fa-pull-right{margin-left:.3em;width:auto}.svg-inline--fa.fa-border{height:1.5em}.svg-inline--fa.fa-li{width:2em}.svg-inline--fa.fa-fw{width:1.25em}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:#ff253a;border-radius:1em;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:0;text-overflow:ellipsis;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:0;right:0;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:0;left:0;right:auto;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{right:0;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:0;right:auto;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top left;transform-origin:top left}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:1;opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor);opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:1;opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fad.fa-inverse{color:#fff}\";\n\n function css () {\n var dfp = DEFAULT_FAMILY_PREFIX;\n var drc = DEFAULT_REPLACEMENT_CLASS;\n var fp = config.familyPrefix;\n var rc = config.replacementClass;\n var s = baseStyles;\n\n if (fp !== dfp || rc !== drc) {\n var dPatt = new RegExp(\"\\\\.\".concat(dfp, \"\\\\-\"), 'g');\n var customPropPatt = new RegExp(\"\\\\--\".concat(dfp, \"\\\\-\"), 'g');\n var rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(customPropPatt, \"--\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n }\n\n return s;\n }\n\n var Library =\n /*#__PURE__*/\n function () {\n function Library() {\n _classCallCheck(this, Library);\n\n this.definitions = {};\n }\n\n _createClass(Library, [{\n key: \"add\",\n value: function add() {\n var _this = this;\n\n for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n definitions[_key] = arguments[_key];\n }\n\n var additions = definitions.reduce(this._pullDefinitions, {});\n Object.keys(additions).forEach(function (key) {\n _this.definitions[key] = _objectSpread({}, _this.definitions[key] || {}, additions[key]);\n defineIcons(key, additions[key]);\n build();\n });\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.definitions = {};\n }\n }, {\n key: \"_pullDefinitions\",\n value: function _pullDefinitions(additions, definition) {\n var normalized = definition.prefix && definition.iconName && definition.icon ? {\n 0: definition\n } : definition;\n Object.keys(normalized).map(function (key) {\n var _normalized$key = normalized[key],\n prefix = _normalized$key.prefix,\n iconName = _normalized$key.iconName,\n icon = _normalized$key.icon;\n if (!additions[prefix]) additions[prefix] = {};\n additions[prefix][iconName] = icon;\n });\n return additions;\n }\n }]);\n\n return Library;\n }();\n\n function ensureCss() {\n if (config.autoAddCss && !_cssInserted) {\n insertCss(css());\n\n _cssInserted = true;\n }\n }\n\n function apiObject(val, abstractCreator) {\n Object.defineProperty(val, 'abstract', {\n get: abstractCreator\n });\n Object.defineProperty(val, 'html', {\n get: function get() {\n return val.abstract.map(function (a) {\n return toHtml(a);\n });\n }\n });\n Object.defineProperty(val, 'node', {\n get: function get() {\n if (!IS_DOM) return;\n var container = DOCUMENT.createElement('div');\n container.innerHTML = val.html;\n return container.children;\n }\n });\n return val;\n }\n\n function findIconDefinition(iconLookup) {\n var _iconLookup$prefix = iconLookup.prefix,\n prefix = _iconLookup$prefix === void 0 ? 'fa' : _iconLookup$prefix,\n iconName = iconLookup.iconName;\n if (!iconName) return;\n return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n }\n\n function resolveIcons(next) {\n return function (maybeIconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n var mask = params.mask;\n\n if (mask) {\n mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n }\n\n return next(iconDefinition, _objectSpread({}, params, {\n mask: mask\n }));\n };\n }\n\n var library = new Library();\n var noAuto = function noAuto() {\n config.autoReplaceSvg = false;\n config.observeMutations = false;\n disconnect();\n };\n var _cssInserted = false;\n var dom = {\n i2svg: function i2svg() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (IS_DOM) {\n ensureCss();\n var _params$node = params.node,\n node = _params$node === void 0 ? DOCUMENT : _params$node,\n _params$callback = params.callback,\n callback = _params$callback === void 0 ? function () {} : _params$callback;\n\n if (config.searchPseudoElements) {\n searchPseudoElements(node);\n }\n\n return onTree(node, callback);\n } else {\n return picked.reject('Operation requires a DOM of some kind.');\n }\n },\n css: css,\n insertCss: function insertCss$$1() {\n if (!_cssInserted) {\n insertCss(css());\n\n _cssInserted = true;\n }\n },\n watch: function watch() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var autoReplaceSvgRoot = params.autoReplaceSvgRoot,\n observeMutationsRoot = params.observeMutationsRoot;\n\n if (config.autoReplaceSvg === false) {\n config.autoReplaceSvg = true;\n }\n\n config.observeMutations = true;\n domready(function () {\n autoReplace({\n autoReplaceSvgRoot: autoReplaceSvgRoot\n });\n observe({\n treeCallback: onTree,\n nodeCallback: onNode,\n pseudoElementsCallback: searchPseudoElements,\n observeMutationsRoot: observeMutationsRoot\n });\n });\n }\n };\n var parse = {\n transform: function transform(transformString) {\n return parseTransformString(transformString);\n }\n };\n var icon = resolveIcons(function (iconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform = params.transform,\n transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n _params$symbol = params.symbol,\n symbol = _params$symbol === void 0 ? false : _params$symbol,\n _params$mask = params.mask,\n mask = _params$mask === void 0 ? null : _params$mask,\n _params$maskId = params.maskId,\n maskId = _params$maskId === void 0 ? null : _params$maskId,\n _params$title = params.title,\n title = _params$title === void 0 ? null : _params$title,\n _params$titleId = params.titleId,\n titleId = _params$titleId === void 0 ? null : _params$titleId,\n _params$classes = params.classes,\n classes = _params$classes === void 0 ? [] : _params$classes,\n _params$attributes = params.attributes,\n attributes = _params$attributes === void 0 ? {} : _params$attributes,\n _params$styles = params.styles,\n styles = _params$styles === void 0 ? {} : _params$styles;\n if (!iconDefinition) return;\n var prefix = iconDefinition.prefix,\n iconName = iconDefinition.iconName,\n icon = iconDefinition.icon;\n return apiObject(_objectSpread({\n type: 'icon'\n }, iconDefinition), function () {\n ensureCss();\n\n if (config.autoA11y) {\n if (title) {\n attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n } else {\n attributes['aria-hidden'] = 'true';\n attributes['focusable'] = 'false';\n }\n }\n\n return makeInlineSvgAbstract({\n icons: {\n main: asFoundIcon(icon),\n mask: mask ? asFoundIcon(mask.icon) : {\n found: false,\n width: null,\n height: null,\n icon: {}\n }\n },\n prefix: prefix,\n iconName: iconName,\n transform: _objectSpread({}, meaninglessTransform, transform),\n symbol: symbol,\n title: title,\n maskId: maskId,\n titleId: titleId,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: classes\n }\n });\n });\n });\n var text = function text(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform2 = params.transform,\n transform = _params$transform2 === void 0 ? meaninglessTransform : _params$transform2,\n _params$title2 = params.title,\n title = _params$title2 === void 0 ? null : _params$title2,\n _params$classes2 = params.classes,\n classes = _params$classes2 === void 0 ? [] : _params$classes2,\n _params$attributes2 = params.attributes,\n attributes = _params$attributes2 === void 0 ? {} : _params$attributes2,\n _params$styles2 = params.styles,\n styles = _params$styles2 === void 0 ? {} : _params$styles2;\n return apiObject({\n type: 'text',\n content: content\n }, function () {\n ensureCss();\n return makeLayersTextAbstract({\n content: content,\n transform: _objectSpread({}, meaninglessTransform, transform),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.familyPrefix, \"-layers-text\")].concat(_toConsumableArray(classes))\n }\n });\n });\n };\n var counter = function counter(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$title3 = params.title,\n title = _params$title3 === void 0 ? null : _params$title3,\n _params$classes3 = params.classes,\n classes = _params$classes3 === void 0 ? [] : _params$classes3,\n _params$attributes3 = params.attributes,\n attributes = _params$attributes3 === void 0 ? {} : _params$attributes3,\n _params$styles3 = params.styles,\n styles = _params$styles3 === void 0 ? {} : _params$styles3;\n return apiObject({\n type: 'counter',\n content: content\n }, function () {\n ensureCss();\n return makeLayersCounterAbstract({\n content: content.toString(),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.familyPrefix, \"-layers-counter\")].concat(_toConsumableArray(classes))\n }\n });\n });\n };\n var layer = function layer(assembler) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$classes4 = params.classes,\n classes = _params$classes4 === void 0 ? [] : _params$classes4;\n return apiObject({\n type: 'layer'\n }, function () {\n ensureCss();\n var children = [];\n assembler(function (args) {\n Array.isArray(args) ? args.map(function (a) {\n children = children.concat(a.abstract);\n }) : children = children.concat(args.abstract);\n });\n return [{\n tag: 'span',\n attributes: {\n class: [\"\".concat(config.familyPrefix, \"-layers\")].concat(_toConsumableArray(classes)).join(' ')\n },\n children: children\n }];\n });\n };\n var api = {\n noAuto: noAuto,\n config: config,\n dom: dom,\n library: library,\n parse: parse,\n findIconDefinition: findIconDefinition,\n icon: icon,\n text: text,\n counter: counter,\n layer: layer,\n toHtml: toHtml\n };\n\n var autoReplace = function autoReplace() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _params$autoReplaceSv = params.autoReplaceSvgRoot,\n autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\n if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n node: autoReplaceSvgRoot\n });\n };\n\n function bootstrap() {\n if (IS_BROWSER) {\n if (!WINDOW.FontAwesome) {\n WINDOW.FontAwesome = api;\n }\n\n domready(function () {\n autoReplace();\n observe({\n treeCallback: onTree,\n nodeCallback: onNode,\n pseudoElementsCallback: searchPseudoElements\n });\n });\n }\n\n namespace.hooks = _objectSpread({}, namespace.hooks, {\n addPack: function addPack(prefix, icons) {\n namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, icons);\n build();\n autoReplace();\n },\n addShims: function addShims(shims) {\n var _namespace$shims;\n\n (_namespace$shims = namespace.shims).push.apply(_namespace$shims, _toConsumableArray(shims));\n\n build();\n autoReplace();\n }\n });\n }\n\n bunker(bootstrap);\n\n}());\n","//TOASTR\r\nimport toastr from 'toastr';\r\nwindow.toastr = toastr;\r\nimport \"./plugins/toastr/toastr.scss\";\r\n\r\n//FANCYBOX\r\nimport '@fancyapps/fancybox';\r\nimport \"./plugins/fancybox/core.scss\";\r\nimport \"./plugins/fancybox/fullscreen.scss\";\r\nimport \"./plugins/fancybox/share.scss\";\r\nimport \"./plugins/fancybox/slideshow.scss\";\r\nimport \"./plugins/fancybox/thumbs.scss\";\r\n\r\n///FONTAWESOME 5\r\nimport '../node_modules/@fortawesome/fontawesome-free/css/all.css';\r\nimport '@fortawesome/fontawesome-free';\r\n\r\n//OWLCAROUSEL\r\nimport 'owl.carousel';\r\nimport \"./plugins/owlcarousel/src/scss/owl.carousel.scss\";\r\nimport \"./plugins/owlcarousel/src/scss/_theme.default.scss\";\r\n\r\n//AOS\r\n\r\nimport '../node_modules/aos/dist/aos.css';","/**\n * Owl Carousel v2.3.4\n * Copyright 2013-2018 David Deutsch\n * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE\n */\n/**\n * Owl carousel\n * @version 2.3.4\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n * @todo Lazy Load Icon\n * @todo prevent animationend bubling\n * @todo itemsScaleUp\n * @todo Test Zepto\n * @todo stagePadding calculate wrong active classes\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates a carousel.\n\t * @class The Owl Carousel.\n\t * @public\n\t * @param {HTMLElement|jQuery} element - The element to create the carousel for.\n\t * @param {Object} [options] - The options\n\t */\n\tfunction Owl(element, options) {\n\n\t\t/**\n\t\t * Current settings for the carousel.\n\t\t * @public\n\t\t */\n\t\tthis.settings = null;\n\n\t\t/**\n\t\t * Current options set by the caller including defaults.\n\t\t * @public\n\t\t */\n\t\tthis.options = $.extend({}, Owl.Defaults, options);\n\n\t\t/**\n\t\t * Plugin element.\n\t\t * @public\n\t\t */\n\t\tthis.$element = $(element);\n\n\t\t/**\n\t\t * Proxied event handlers.\n\t\t * @protected\n\t\t */\n\t\tthis._handlers = {};\n\n\t\t/**\n\t\t * References to the running plugins of this carousel.\n\t\t * @protected\n\t\t */\n\t\tthis._plugins = {};\n\n\t\t/**\n\t\t * Currently suppressed events to prevent them from being retriggered.\n\t\t * @protected\n\t\t */\n\t\tthis._supress = {};\n\n\t\t/**\n\t\t * Absolute current position.\n\t\t * @protected\n\t\t */\n\t\tthis._current = null;\n\n\t\t/**\n\t\t * Animation speed in milliseconds.\n\t\t * @protected\n\t\t */\n\t\tthis._speed = null;\n\n\t\t/**\n\t\t * Coordinates of all items in pixel.\n\t\t * @todo The name of this member is missleading.\n\t\t * @protected\n\t\t */\n\t\tthis._coordinates = [];\n\n\t\t/**\n\t\t * Current breakpoint.\n\t\t * @todo Real media queries would be nice.\n\t\t * @protected\n\t\t */\n\t\tthis._breakpoint = null;\n\n\t\t/**\n\t\t * Current width of the plugin element.\n\t\t */\n\t\tthis._width = null;\n\n\t\t/**\n\t\t * All real items.\n\t\t * @protected\n\t\t */\n\t\tthis._items = [];\n\n\t\t/**\n\t\t * All cloned items.\n\t\t * @protected\n\t\t */\n\t\tthis._clones = [];\n\n\t\t/**\n\t\t * Merge values of all items.\n\t\t * @todo Maybe this could be part of a plugin.\n\t\t * @protected\n\t\t */\n\t\tthis._mergers = [];\n\n\t\t/**\n\t\t * Widths of all items.\n\t\t */\n\t\tthis._widths = [];\n\n\t\t/**\n\t\t * Invalidated parts within the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._invalidated = {};\n\n\t\t/**\n\t\t * Ordered list of workers for the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._pipe = [];\n\n\t\t/**\n\t\t * Current state information for the drag operation.\n\t\t * @todo #261\n\t\t * @protected\n\t\t */\n\t\tthis._drag = {\n\t\t\ttime: null,\n\t\t\ttarget: null,\n\t\t\tpointer: null,\n\t\t\tstage: {\n\t\t\t\tstart: null,\n\t\t\t\tcurrent: null\n\t\t\t},\n\t\t\tdirection: null\n\t\t};\n\n\t\t/**\n\t\t * Current state information and their tags.\n\t\t * @type {Object}\n\t\t * @protected\n\t\t */\n\t\tthis._states = {\n\t\t\tcurrent: {},\n\t\t\ttags: {\n\t\t\t\t'initializing': [ 'busy' ],\n\t\t\t\t'animating': [ 'busy' ],\n\t\t\t\t'dragging': [ 'interacting' ]\n\t\t\t}\n\t\t};\n\n\t\t$.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {\n\t\t\tthis._handlers[handler] = $.proxy(this[handler], this);\n\t\t}, this));\n\n\t\t$.each(Owl.Plugins, $.proxy(function(key, plugin) {\n\t\t\tthis._plugins[key.charAt(0).toLowerCase() + key.slice(1)]\n\t\t\t\t= new plugin(this);\n\t\t}, this));\n\n\t\t$.each(Owl.Workers, $.proxy(function(priority, worker) {\n\t\t\tthis._pipe.push({\n\t\t\t\t'filter': worker.filter,\n\t\t\t\t'run': $.proxy(worker.run, this)\n\t\t\t});\n\t\t}, this));\n\n\t\tthis.setup();\n\t\tthis.initialize();\n\t}\n\n\t/**\n\t * Default options for the carousel.\n\t * @public\n\t */\n\tOwl.Defaults = {\n\t\titems: 3,\n\t\tloop: false,\n\t\tcenter: false,\n\t\trewind: false,\n\t\tcheckVisibility: true,\n\n\t\tmouseDrag: true,\n\t\ttouchDrag: true,\n\t\tpullDrag: true,\n\t\tfreeDrag: false,\n\n\t\tmargin: 0,\n\t\tstagePadding: 0,\n\n\t\tmerge: false,\n\t\tmergeFit: true,\n\t\tautoWidth: false,\n\n\t\tstartPosition: 0,\n\t\trtl: false,\n\n\t\tsmartSpeed: 250,\n\t\tfluidSpeed: false,\n\t\tdragEndSpeed: false,\n\n\t\tresponsive: {},\n\t\tresponsiveRefreshRate: 200,\n\t\tresponsiveBaseElement: window,\n\n\t\tfallbackEasing: 'swing',\n\t\tslideTransition: '',\n\n\t\tinfo: false,\n\n\t\tnestedItemSelector: false,\n\t\titemElement: 'div',\n\t\tstageElement: 'div',\n\n\t\trefreshClass: 'owl-refresh',\n\t\tloadedClass: 'owl-loaded',\n\t\tloadingClass: 'owl-loading',\n\t\trtlClass: 'owl-rtl',\n\t\tresponsiveClass: 'owl-responsive',\n\t\tdragClass: 'owl-drag',\n\t\titemClass: 'owl-item',\n\t\tstageClass: 'owl-stage',\n\t\tstageOuterClass: 'owl-stage-outer',\n\t\tgrabClass: 'owl-grab'\n\t};\n\n\t/**\n\t * Enumeration for width.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Width = {\n\t\tDefault: 'default',\n\t\tInner: 'inner',\n\t\tOuter: 'outer'\n\t};\n\n\t/**\n\t * Enumeration for types.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Type = {\n\t\tEvent: 'event',\n\t\tState: 'state'\n\t};\n\n\t/**\n\t * Contains all registered plugins.\n\t * @public\n\t */\n\tOwl.Plugins = {};\n\n\t/**\n\t * List of workers involved in the update process.\n\t */\n\tOwl.Workers = [ {\n\t\tfilter: [ 'width', 'settings' ],\n\t\trun: function() {\n\t\t\tthis._width = this.$element.width();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = this._items && this._items[this.relative(this._current)];\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tthis.$stage.children('.cloned').remove();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar margin = this.settings.margin || '',\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\trtl = this.settings.rtl,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': 'auto',\n\t\t\t\t\t'margin-left': rtl ? margin : '',\n\t\t\t\t\t'margin-right': rtl ? '' : margin\n\t\t\t\t};\n\n\t\t\t!grid && this.$stage.children().css(css);\n\n\t\t\tcache.css = css;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,\n\t\t\t\tmerge = null,\n\t\t\t\titerator = this._items.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\twidths = [];\n\n\t\t\tcache.items = {\n\t\t\t\tmerge: false,\n\t\t\t\twidth: width\n\t\t\t};\n\n\t\t\twhile (iterator--) {\n\t\t\t\tmerge = this._mergers[iterator];\n\t\t\t\tmerge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;\n\n\t\t\t\tcache.items.merge = merge > 1 || cache.items.merge;\n\n\t\t\t\twidths[iterator] = !grid ? this._items[iterator].width() : width * merge;\n\t\t\t}\n\n\t\t\tthis._widths = widths;\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar clones = [],\n\t\t\t\titems = this._items,\n\t\t\t\tsettings = this.settings,\n\t\t\t\t// TODO: Should be computed from number of min width items in stage\n\t\t\t\tview = Math.max(settings.items * 2, 4),\n\t\t\t\tsize = Math.ceil(items.length / 2) * 2,\n\t\t\t\trepeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,\n\t\t\t\tappend = '',\n\t\t\t\tprepend = '';\n\n\t\t\trepeat /= 2;\n\n\t\t\twhile (repeat > 0) {\n\t\t\t\t// Switch to only using appended clones\n\t\t\t\tclones.push(this.normalize(clones.length / 2, true));\n\t\t\t\tappend = append + items[clones[clones.length - 1]][0].outerHTML;\n\t\t\t\tclones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));\n\t\t\t\tprepend = items[clones[clones.length - 1]][0].outerHTML + prepend;\n\t\t\t\trepeat -= 1;\n\t\t\t}\n\n\t\t\tthis._clones = clones;\n\n\t\t\t$(append).addClass('cloned').appendTo(this.$stage);\n\t\t\t$(prepend).addClass('cloned').prependTo(this.$stage);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tsize = this._clones.length + this._items.length,\n\t\t\t\titerator = -1,\n\t\t\t\tprevious = 0,\n\t\t\t\tcurrent = 0,\n\t\t\t\tcoordinates = [];\n\n\t\t\twhile (++iterator < size) {\n\t\t\t\tprevious = coordinates[iterator - 1] || 0;\n\t\t\t\tcurrent = this._widths[this.relative(iterator)] + this.settings.margin;\n\t\t\t\tcoordinates.push(previous + current * rtl);\n\t\t\t}\n\n\t\t\tthis._coordinates = coordinates;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar padding = this.settings.stagePadding,\n\t\t\t\tcoordinates = this._coordinates,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,\n\t\t\t\t\t'padding-left': padding || '',\n\t\t\t\t\t'padding-right': padding || ''\n\t\t\t\t};\n\n\t\t\tthis.$stage.css(css);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar iterator = this._coordinates.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\titems = this.$stage.children();\n\n\t\t\tif (grid && cache.items.merge) {\n\t\t\t\twhile (iterator--) {\n\t\t\t\t\tcache.css.width = this._widths[this.relative(iterator)];\n\t\t\t\t\titems.eq(iterator).css(cache.css);\n\t\t\t\t}\n\t\t\t} else if (grid) {\n\t\t\t\tcache.css.width = cache.items.width;\n\t\t\t\titems.css(cache.css);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tfilter: [ 'items' ],\n\t\trun: function() {\n\t\t\tthis._coordinates.length < 1 && this.$stage.removeAttr('style');\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = cache.current ? this.$stage.children().index(cache.current) : 0;\n\t\t\tcache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));\n\t\t\tthis.reset(cache.current);\n\t\t}\n\t}, {\n\t\tfilter: [ 'position' ],\n\t\trun: function() {\n\t\t\tthis.animate(this.coordinates(this._current));\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'position', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tpadding = this.settings.stagePadding * 2,\n\t\t\t\tbegin = this.coordinates(this.current()) + padding,\n\t\t\t\tend = begin + this.width() * rtl,\n\t\t\t\tinner, outer, matches = [], i, n;\n\n\t\t\tfor (i = 0, n = this._coordinates.length; i < n; i++) {\n\t\t\t\tinner = this._coordinates[i - 1] || 0;\n\t\t\t\touter = Math.abs(this._coordinates[i]) + padding * rtl;\n\n\t\t\t\tif ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))\n\t\t\t\t\t|| (this.op(outer, '<', begin) && this.op(outer, '>', end))) {\n\t\t\t\t\tmatches.push(i);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.$stage.children('.active').removeClass('active');\n\t\t\tthis.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');\n\n\t\t\tthis.$stage.children('.center').removeClass('center');\n\t\t\tif (this.settings.center) {\n\t\t\t\tthis.$stage.children().eq(this.current()).addClass('center');\n\t\t\t}\n\t\t}\n\t} ];\n\n\t/**\n\t * Create the stage DOM element\n\t */\n\tOwl.prototype.initializeStage = function() {\n\t\tthis.$stage = this.$element.find('.' + this.settings.stageClass);\n\n\t\t// if the stage is already in the DOM, grab it and skip stage initialization\n\t\tif (this.$stage.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.$element.addClass(this.options.loadingClass);\n\n\t\t// create stage\n\t\tthis.$stage = $('<' + this.settings.stageElement + '>', {\n\t\t\t\"class\": this.settings.stageClass\n\t\t}).wrap( $( '
', {\n\t\t\t\"class\": this.settings.stageOuterClass\n\t\t}));\n\n\t\t// append stage\n\t\tthis.$element.append(this.$stage.parent());\n\t};\n\n\t/**\n\t * Create item DOM elements\n\t */\n\tOwl.prototype.initializeItems = function() {\n\t\tvar $items = this.$element.find('.owl-item');\n\n\t\t// if the items are already in the DOM, grab them and skip item initialization\n\t\tif ($items.length) {\n\t\t\tthis._items = $items.get().map(function(item) {\n\t\t\t\treturn $(item);\n\t\t\t});\n\n\t\t\tthis._mergers = this._items.map(function() {\n\t\t\t\treturn 1;\n\t\t\t});\n\n\t\t\tthis.refresh();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// append content\n\t\tthis.replace(this.$element.children().not(this.$stage.parent()));\n\n\t\t// check visibility\n\t\tif (this.isVisible()) {\n\t\t\t// update view\n\t\t\tthis.refresh();\n\t\t} else {\n\t\t\t// invalidate width\n\t\t\tthis.invalidate('width');\n\t\t}\n\n\t\tthis.$element\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.addClass(this.options.loadedClass);\n\t};\n\n\t/**\n\t * Initializes the carousel.\n\t * @protected\n\t */\n\tOwl.prototype.initialize = function() {\n\t\tthis.enter('initializing');\n\t\tthis.trigger('initialize');\n\n\t\tthis.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);\n\n\t\tif (this.settings.autoWidth && !this.is('pre-loading')) {\n\t\t\tvar imgs, nestedSelector, width;\n\t\t\timgs = this.$element.find('img');\n\t\t\tnestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;\n\t\t\twidth = this.$element.children(nestedSelector).width();\n\n\t\t\tif (imgs.length && width <= 0) {\n\t\t\t\tthis.preloadAutoWidthImages(imgs);\n\t\t\t}\n\t\t}\n\n\t\tthis.initializeStage();\n\t\tthis.initializeItems();\n\n\t\t// register event handlers\n\t\tthis.registerEventHandlers();\n\n\t\tthis.leave('initializing');\n\t\tthis.trigger('initialized');\n\t};\n\n\t/**\n\t * @returns {Boolean} visibility of $element\n\t * if you know the carousel will always be visible you can set `checkVisibility` to `false` to\n\t * prevent the expensive browser layout forced reflow the $element.is(':visible') does\n\t */\n\tOwl.prototype.isVisible = function() {\n\t\treturn this.settings.checkVisibility\n\t\t\t? this.$element.is(':visible')\n\t\t\t: true;\n\t};\n\n\t/**\n\t * Setups the current settings.\n\t * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?\n\t * @todo Support for media queries by using `matchMedia` would be nice.\n\t * @public\n\t */\n\tOwl.prototype.setup = function() {\n\t\tvar viewport = this.viewport(),\n\t\t\toverwrites = this.options.responsive,\n\t\t\tmatch = -1,\n\t\t\tsettings = null;\n\n\t\tif (!overwrites) {\n\t\t\tsettings = $.extend({}, this.options);\n\t\t} else {\n\t\t\t$.each(overwrites, function(breakpoint) {\n\t\t\t\tif (breakpoint <= viewport && breakpoint > match) {\n\t\t\t\t\tmatch = Number(breakpoint);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsettings = $.extend({}, this.options, overwrites[match]);\n\t\t\tif (typeof settings.stagePadding === 'function') {\n\t\t\t\tsettings.stagePadding = settings.stagePadding();\n\t\t\t}\n\t\t\tdelete settings.responsive;\n\n\t\t\t// responsive class\n\t\t\tif (settings.responsiveClass) {\n\t\t\t\tthis.$element.attr('class',\n\t\t\t\t\tthis.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\\\S+\\\\s', 'g'), '$1' + match)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.trigger('change', { property: { name: 'settings', value: settings } });\n\t\tthis._breakpoint = match;\n\t\tthis.settings = settings;\n\t\tthis.invalidate('settings');\n\t\tthis.trigger('changed', { property: { name: 'settings', value: this.settings } });\n\t};\n\n\t/**\n\t * Updates option logic if necessery.\n\t * @protected\n\t */\n\tOwl.prototype.optionsLogic = function() {\n\t\tif (this.settings.autoWidth) {\n\t\t\tthis.settings.stagePadding = false;\n\t\t\tthis.settings.merge = false;\n\t\t}\n\t};\n\n\t/**\n\t * Prepares an item before add.\n\t * @todo Rename event parameter `content` to `item`.\n\t * @protected\n\t * @returns {jQuery|HTMLElement} - The item container.\n\t */\n\tOwl.prototype.prepare = function(item) {\n\t\tvar event = this.trigger('prepare', { content: item });\n\n\t\tif (!event.data) {\n\t\t\tevent.data = $('<' + this.settings.itemElement + '/>')\n\t\t\t\t.addClass(this.options.itemClass).append(item)\n\t\t}\n\n\t\tthis.trigger('prepared', { content: event.data });\n\n\t\treturn event.data;\n\t};\n\n\t/**\n\t * Updates the view.\n\t * @public\n\t */\n\tOwl.prototype.update = function() {\n\t\tvar i = 0,\n\t\t\tn = this._pipe.length,\n\t\t\tfilter = $.proxy(function(p) { return this[p] }, this._invalidated),\n\t\t\tcache = {};\n\n\t\twhile (i < n) {\n\t\t\tif (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {\n\t\t\t\tthis._pipe[i].run(cache);\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\n\t\tthis._invalidated = {};\n\n\t\t!this.is('valid') && this.enter('valid');\n\t};\n\n\t/**\n\t * Gets the width of the view.\n\t * @public\n\t * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.\n\t * @returns {Number} - The width of the view in pixel.\n\t */\n\tOwl.prototype.width = function(dimension) {\n\t\tdimension = dimension || Owl.Width.Default;\n\t\tswitch (dimension) {\n\t\t\tcase Owl.Width.Inner:\n\t\t\tcase Owl.Width.Outer:\n\t\t\t\treturn this._width;\n\t\t\tdefault:\n\t\t\t\treturn this._width - this.settings.stagePadding * 2 + this.settings.margin;\n\t\t}\n\t};\n\n\t/**\n\t * Refreshes the carousel primarily for adaptive purposes.\n\t * @public\n\t */\n\tOwl.prototype.refresh = function() {\n\t\tthis.enter('refreshing');\n\t\tthis.trigger('refresh');\n\n\t\tthis.setup();\n\n\t\tthis.optionsLogic();\n\n\t\tthis.$element.addClass(this.options.refreshClass);\n\n\t\tthis.update();\n\n\t\tthis.$element.removeClass(this.options.refreshClass);\n\n\t\tthis.leave('refreshing');\n\t\tthis.trigger('refreshed');\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onThrottledResize = function() {\n\t\twindow.clearTimeout(this.resizeTimer);\n\t\tthis.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onResize = function() {\n\t\tif (!this._items.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._width === this.$element.width()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.isVisible()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.enter('resizing');\n\n\t\tif (this.trigger('resize').isDefaultPrevented()) {\n\t\t\tthis.leave('resizing');\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.invalidate('width');\n\n\t\tthis.refresh();\n\n\t\tthis.leave('resizing');\n\t\tthis.trigger('resized');\n\t};\n\n\t/**\n\t * Registers event handlers.\n\t * @todo Check `msPointerEnabled`\n\t * @todo #261\n\t * @protected\n\t */\n\tOwl.prototype.registerEventHandlers = function() {\n\t\tif ($.support.transition) {\n\t\t\tthis.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));\n\t\t}\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\tthis.on(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tif (this.settings.mouseDrag) {\n\t\t\tthis.$element.addClass(this.options.dragClass);\n\t\t\tthis.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });\n\t\t}\n\n\t\tif (this.settings.touchDrag){\n\t\t\tthis.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));\n\t\t}\n\t};\n\n\t/**\n\t * Handles `touchstart` and `mousedown` events.\n\t * @todo Horizontal swipe threshold as option\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragStart = function(event) {\n\t\tvar stage = null;\n\n\t\tif (event.which === 3) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ($.support.transform) {\n\t\t\tstage = this.$stage.css('transform').replace(/.*\\(|\\)| /g, '').split(',');\n\t\t\tstage = {\n\t\t\t\tx: stage[stage.length === 16 ? 12 : 4],\n\t\t\t\ty: stage[stage.length === 16 ? 13 : 5]\n\t\t\t};\n\t\t} else {\n\t\t\tstage = this.$stage.position();\n\t\t\tstage = {\n\t\t\t\tx: this.settings.rtl ?\n\t\t\t\t\tstage.left + this.$stage.width() - this.width() + this.settings.margin :\n\t\t\t\t\tstage.left,\n\t\t\t\ty: stage.top\n\t\t\t};\n\t\t}\n\n\t\tif (this.is('animating')) {\n\t\t\t$.support.transform ? this.animate(stage.x) : this.$stage.stop()\n\t\t\tthis.invalidate('position');\n\t\t}\n\n\t\tthis.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');\n\n\t\tthis.speed(0);\n\n\t\tthis._drag.time = new Date().getTime();\n\t\tthis._drag.target = $(event.target);\n\t\tthis._drag.stage.start = stage;\n\t\tthis._drag.stage.current = stage;\n\t\tthis._drag.pointer = this.pointer(event);\n\n\t\t$(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));\n\n\t\t$(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {\n\t\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event));\n\n\t\t\t$(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));\n\n\t\t\tif (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.enter('dragging');\n\t\t\tthis.trigger('drag');\n\t\t}, this));\n\t};\n\n\t/**\n\t * Handles the `touchmove` and `mousemove` events.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragMove = function(event) {\n\t\tvar minimum = null,\n\t\t\tmaximum = null,\n\t\t\tpull = null,\n\t\t\tdelta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this.difference(this._drag.stage.start, delta);\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tif (this.settings.loop) {\n\t\t\tminimum = this.coordinates(this.minimum());\n\t\t\tmaximum = this.coordinates(this.maximum() + 1) - minimum;\n\t\t\tstage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;\n\t\t} else {\n\t\t\tminimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());\n\t\t\tmaximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());\n\t\t\tpull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;\n\t\t\tstage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);\n\t\t}\n\n\t\tthis._drag.stage.current = stage;\n\n\t\tthis.animate(stage.x);\n\t};\n\n\t/**\n\t * Handles the `touchend` and `mouseup` events.\n\t * @todo #261\n\t * @todo Threshold for click event\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragEnd = function(event) {\n\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this._drag.stage.current,\n\t\t\tdirection = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';\n\n\t\t$(document).off('.owl.core');\n\n\t\tthis.$element.removeClass(this.options.grabClass);\n\n\t\tif (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {\n\t\t\tthis.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);\n\t\t\tthis.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));\n\t\t\tthis.invalidate('position');\n\t\t\tthis.update();\n\n\t\t\tthis._drag.direction = direction;\n\n\t\t\tif (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {\n\t\t\t\tthis._drag.target.one('click.owl.core', function() { return false; });\n\t\t\t}\n\t\t}\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.leave('dragging');\n\t\tthis.trigger('dragged');\n\t};\n\n\t/**\n\t * Gets absolute position of the closest item for a coordinate.\n\t * @todo Setting `freeDrag` makes `closest` not reusable. See #165.\n\t * @protected\n\t * @param {Number} coordinate - The coordinate in pixel.\n\t * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.\n\t * @return {Number} - The absolute position of the closest item.\n\t */\n\tOwl.prototype.closest = function(coordinate, direction) {\n\t\tvar position = -1,\n\t\t\tpull = 30,\n\t\t\twidth = this.width(),\n\t\t\tcoordinates = this.coordinates();\n\n\t\tif (!this.settings.freeDrag) {\n\t\t\t// check closest item\n\t\t\t$.each(coordinates, $.proxy(function(index, value) {\n\t\t\t\t// on a left pull, check on current index\n\t\t\t\tif (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {\n\t\t\t\t\tposition = index;\n\t\t\t\t// on a right pull, check on previous index\n\t\t\t\t// to do so, subtract width from value and set position = index + 1\n\t\t\t\t} else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {\n\t\t\t\t\tposition = index + 1;\n\t\t\t\t} else if (this.op(coordinate, '<', value)\n\t\t\t\t\t&& this.op(coordinate, '>', coordinates[index + 1] !== undefined ? coordinates[index + 1] : value - width)) {\n\t\t\t\t\tposition = direction === 'left' ? index + 1 : index;\n\t\t\t\t}\n\t\t\t\treturn position === -1;\n\t\t\t}, this));\n\t\t}\n\n\t\tif (!this.settings.loop) {\n\t\t\t// non loop boundries\n\t\t\tif (this.op(coordinate, '>', coordinates[this.minimum()])) {\n\t\t\t\tposition = coordinate = this.minimum();\n\t\t\t} else if (this.op(coordinate, '<', coordinates[this.maximum()])) {\n\t\t\t\tposition = coordinate = this.maximum();\n\t\t\t}\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Animates the stage.\n\t * @todo #270\n\t * @public\n\t * @param {Number} coordinate - The coordinate in pixels.\n\t */\n\tOwl.prototype.animate = function(coordinate) {\n\t\tvar animate = this.speed() > 0;\n\n\t\tthis.is('animating') && this.onTransitionEnd();\n\n\t\tif (animate) {\n\t\t\tthis.enter('animating');\n\t\t\tthis.trigger('translate');\n\t\t}\n\n\t\tif ($.support.transform3d && $.support.transition) {\n\t\t\tthis.$stage.css({\n\t\t\t\ttransform: 'translate3d(' + coordinate + 'px,0px,0px)',\n\t\t\t\ttransition: (this.speed() / 1000) + 's' + (\n\t\t\t\t\tthis.settings.slideTransition ? ' ' + this.settings.slideTransition : ''\n\t\t\t\t)\n\t\t\t});\n\t\t} else if (animate) {\n\t\t\tthis.$stage.animate({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t}, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));\n\t\t} else {\n\t\t\tthis.$stage.css({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Checks whether the carousel is in a specific state or not.\n\t * @param {String} state - The state to check.\n\t * @returns {Boolean} - The flag which indicates if the carousel is busy.\n\t */\n\tOwl.prototype.is = function(state) {\n\t\treturn this._states.current[state] && this._states.current[state] > 0;\n\t};\n\n\t/**\n\t * Sets the absolute position of the current item.\n\t * @public\n\t * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.\n\t * @returns {Number} - The absolute position of the current item.\n\t */\n\tOwl.prototype.current = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._current;\n\t\t}\n\n\t\tif (this._items.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tposition = this.normalize(position);\n\n\t\tif (this._current !== position) {\n\t\t\tvar event = this.trigger('change', { property: { name: 'position', value: position } });\n\n\t\t\tif (event.data !== undefined) {\n\t\t\t\tposition = this.normalize(event.data);\n\t\t\t}\n\n\t\t\tthis._current = position;\n\n\t\t\tthis.invalidate('position');\n\n\t\t\tthis.trigger('changed', { property: { name: 'position', value: this._current } });\n\t\t}\n\n\t\treturn this._current;\n\t};\n\n\t/**\n\t * Invalidates the given part of the update routine.\n\t * @param {String} [part] - The part to invalidate.\n\t * @returns {Array.} - The invalidated parts.\n\t */\n\tOwl.prototype.invalidate = function(part) {\n\t\tif ($.type(part) === 'string') {\n\t\t\tthis._invalidated[part] = true;\n\t\t\tthis.is('valid') && this.leave('valid');\n\t\t}\n\t\treturn $.map(this._invalidated, function(v, i) { return i });\n\t};\n\n\t/**\n\t * Resets the absolute position of the current item.\n\t * @public\n\t * @param {Number} position - The absolute position of the new item.\n\t */\n\tOwl.prototype.reset = function(position) {\n\t\tposition = this.normalize(position);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._speed = 0;\n\t\tthis._current = position;\n\n\t\tthis.suppress([ 'translate', 'translated' ]);\n\n\t\tthis.animate(this.coordinates(position));\n\n\t\tthis.release([ 'translate', 'translated' ]);\n\t};\n\n\t/**\n\t * Normalizes an absolute or a relative position of an item.\n\t * @public\n\t * @param {Number} position - The absolute or relative position to normalize.\n\t * @param {Boolean} [relative=false] - Whether the given position is relative or not.\n\t * @returns {Number} - The normalized position.\n\t */\n\tOwl.prototype.normalize = function(position, relative) {\n\t\tvar n = this._items.length,\n\t\t\tm = relative ? 0 : this._clones.length;\n\n\t\tif (!this.isNumeric(position) || n < 1) {\n\t\t\tposition = undefined;\n\t\t} else if (position < 0 || position >= n + m) {\n\t\t\tposition = ((position - m / 2) % n + n) % n + m / 2;\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Converts an absolute position of an item into a relative one.\n\t * @public\n\t * @param {Number} position - The absolute position to convert.\n\t * @returns {Number} - The converted position.\n\t */\n\tOwl.prototype.relative = function(position) {\n\t\tposition -= this._clones.length / 2;\n\t\treturn this.normalize(position, true);\n\t};\n\n\t/**\n\t * Gets the maximum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.maximum = function(relative) {\n\t\tvar settings = this.settings,\n\t\t\tmaximum = this._coordinates.length,\n\t\t\titerator,\n\t\t\treciprocalItemsWidth,\n\t\t\telementWidth;\n\n\t\tif (settings.loop) {\n\t\t\tmaximum = this._clones.length / 2 + this._items.length - 1;\n\t\t} else if (settings.autoWidth || settings.merge) {\n\t\t\titerator = this._items.length;\n\t\t\tif (iterator) {\n\t\t\t\treciprocalItemsWidth = this._items[--iterator].width();\n\t\t\t\telementWidth = this.$element.width();\n\t\t\t\twhile (iterator--) {\n\t\t\t\t\treciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;\n\t\t\t\t\tif (reciprocalItemsWidth > elementWidth) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmaximum = iterator + 1;\n\t\t} else if (settings.center) {\n\t\t\tmaximum = this._items.length - 1;\n\t\t} else {\n\t\t\tmaximum = this._items.length - settings.items;\n\t\t}\n\n\t\tif (relative) {\n\t\t\tmaximum -= this._clones.length / 2;\n\t\t}\n\n\t\treturn Math.max(maximum, 0);\n\t};\n\n\t/**\n\t * Gets the minimum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.minimum = function(relative) {\n\t\treturn relative ? 0 : this._clones.length / 2;\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.items = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._items.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._items[position];\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.mergers = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._mergers.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._mergers[position];\n\t};\n\n\t/**\n\t * Gets the absolute positions of clones for an item.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @returns {Array.} - The absolute positions of clones for the item or all if no position was given.\n\t */\n\tOwl.prototype.clones = function(position) {\n\t\tvar odd = this._clones.length / 2,\n\t\t\teven = odd + this._items.length,\n\t\t\tmap = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._clones, function(v, i) { return map(i) });\n\t\t}\n\n\t\treturn $.map(this._clones, function(v, i) { return v === position ? map(i) : null });\n\t};\n\n\t/**\n\t * Sets the current animation speed.\n\t * @public\n\t * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.\n\t * @returns {Number} - The current animation speed in milliseconds.\n\t */\n\tOwl.prototype.speed = function(speed) {\n\t\tif (speed !== undefined) {\n\t\t\tthis._speed = speed;\n\t\t}\n\n\t\treturn this._speed;\n\t};\n\n\t/**\n\t * Gets the coordinate of an item.\n\t * @todo The name of this method is missleanding.\n\t * @public\n\t * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.\n\t * @returns {Number|Array.} - The coordinate of the item in pixel or all coordinates.\n\t */\n\tOwl.prototype.coordinates = function(position) {\n\t\tvar multiplier = 1,\n\t\t\tnewPosition = position - 1,\n\t\t\tcoordinate;\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._coordinates, $.proxy(function(coordinate, index) {\n\t\t\t\treturn this.coordinates(index);\n\t\t\t}, this));\n\t\t}\n\n\t\tif (this.settings.center) {\n\t\t\tif (this.settings.rtl) {\n\t\t\t\tmultiplier = -1;\n\t\t\t\tnewPosition = position + 1;\n\t\t\t}\n\n\t\t\tcoordinate = this._coordinates[position];\n\t\t\tcoordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;\n\t\t} else {\n\t\t\tcoordinate = this._coordinates[newPosition] || 0;\n\t\t}\n\n\t\tcoordinate = Math.ceil(coordinate);\n\n\t\treturn coordinate;\n\t};\n\n\t/**\n\t * Calculates the speed for a translation.\n\t * @protected\n\t * @param {Number} from - The absolute position of the start item.\n\t * @param {Number} to - The absolute position of the target item.\n\t * @param {Number} [factor=undefined] - The time factor in milliseconds.\n\t * @returns {Number} - The time in milliseconds for the translation.\n\t */\n\tOwl.prototype.duration = function(from, to, factor) {\n\t\tif (factor === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));\n\t};\n\n\t/**\n\t * Slides to the specified item.\n\t * @public\n\t * @param {Number} position - The position of the item.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.to = function(position, speed) {\n\t\tvar current = this.current(),\n\t\t\trevert = null,\n\t\t\tdistance = position - this.relative(current),\n\t\t\tdirection = (distance > 0) - (distance < 0),\n\t\t\titems = this._items.length,\n\t\t\tminimum = this.minimum(),\n\t\t\tmaximum = this.maximum();\n\n\t\tif (this.settings.loop) {\n\t\t\tif (!this.settings.rewind && Math.abs(distance) > items / 2) {\n\t\t\t\tdistance += direction * -1 * items;\n\t\t\t}\n\n\t\t\tposition = current + distance;\n\t\t\trevert = ((position - minimum) % items + items) % items + minimum;\n\n\t\t\tif (revert !== position && revert - distance <= maximum && revert - distance > 0) {\n\t\t\t\tcurrent = revert - distance;\n\t\t\t\tposition = revert;\n\t\t\t\tthis.reset(current);\n\t\t\t}\n\t\t} else if (this.settings.rewind) {\n\t\t\tmaximum += 1;\n\t\t\tposition = (position % maximum + maximum) % maximum;\n\t\t} else {\n\t\t\tposition = Math.max(minimum, Math.min(maximum, position));\n\t\t}\n\n\t\tthis.speed(this.duration(current, position, speed));\n\t\tthis.current(position);\n\n\t\tif (this.isVisible()) {\n\t\t\tthis.update();\n\t\t}\n\t};\n\n\t/**\n\t * Slides to the next item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.next = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) + 1, speed);\n\t};\n\n\t/**\n\t * Slides to the previous item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.prev = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) - 1, speed);\n\t};\n\n\t/**\n\t * Handles the end of an animation.\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onTransitionEnd = function(event) {\n\n\t\t// if css2 animation then event object is undefined\n\t\tif (event !== undefined) {\n\t\t\tevent.stopPropagation();\n\n\t\t\t// Catch only owl-stage transitionEnd event\n\t\t\tif ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.leave('animating');\n\t\tthis.trigger('translated');\n\t};\n\n\t/**\n\t * Gets viewport width.\n\t * @protected\n\t * @return {Number} - The width in pixel.\n\t */\n\tOwl.prototype.viewport = function() {\n\t\tvar width;\n\t\tif (this.options.responsiveBaseElement !== window) {\n\t\t\twidth = $(this.options.responsiveBaseElement).width();\n\t\t} else if (window.innerWidth) {\n\t\t\twidth = window.innerWidth;\n\t\t} else if (document.documentElement && document.documentElement.clientWidth) {\n\t\t\twidth = document.documentElement.clientWidth;\n\t\t} else {\n\t\t\tconsole.warn('Can not detect viewport width.');\n\t\t}\n\t\treturn width;\n\t};\n\n\t/**\n\t * Replaces the current content.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The new content.\n\t */\n\tOwl.prototype.replace = function(content) {\n\t\tthis.$stage.empty();\n\t\tthis._items = [];\n\n\t\tif (content) {\n\t\t\tcontent = (content instanceof jQuery) ? content : $(content);\n\t\t}\n\n\t\tif (this.settings.nestedItemSelector) {\n\t\t\tcontent = content.find('.' + this.settings.nestedItemSelector);\n\t\t}\n\n\t\tcontent.filter(function() {\n\t\t\treturn this.nodeType === 1;\n\t\t}).each($.proxy(function(index, item) {\n\t\t\titem = this.prepare(item);\n\t\t\tthis.$stage.append(item);\n\t\t\tthis._items.push(item);\n\t\t\tthis._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}, this));\n\n\t\tthis.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);\n\n\t\tthis.invalidate('items');\n\t};\n\n\t/**\n\t * Adds an item.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The item content to add.\n\t * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.\n\t */\n\tOwl.prototype.add = function(content, position) {\n\t\tvar current = this.relative(this._current);\n\n\t\tposition = position === undefined ? this._items.length : this.normalize(position, true);\n\t\tcontent = content instanceof jQuery ? content : $(content);\n\n\t\tthis.trigger('add', { content: content, position: position });\n\n\t\tcontent = this.prepare(content);\n\n\t\tif (this._items.length === 0 || position === this._items.length) {\n\t\t\tthis._items.length === 0 && this.$stage.append(content);\n\t\t\tthis._items.length !== 0 && this._items[position - 1].after(content);\n\t\t\tthis._items.push(content);\n\t\t\tthis._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t} else {\n\t\t\tthis._items[position].before(content);\n\t\t\tthis._items.splice(position, 0, content);\n\t\t\tthis._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}\n\n\t\tthis._items[current] && this.reset(this._items[current].index());\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('added', { content: content, position: position });\n\t};\n\n\t/**\n\t * Removes an item by its position.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {Number} position - The relative position of the item to remove.\n\t */\n\tOwl.prototype.remove = function(position) {\n\t\tposition = this.normalize(position, true);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.trigger('remove', { content: this._items[position], position: position });\n\n\t\tthis._items[position].remove();\n\t\tthis._items.splice(position, 1);\n\t\tthis._mergers.splice(position, 1);\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('removed', { content: null, position: position });\n\t};\n\n\t/**\n\t * Preloads images with auto width.\n\t * @todo Replace by a more generic approach\n\t * @protected\n\t */\n\tOwl.prototype.preloadAutoWidthImages = function(images) {\n\t\timages.each($.proxy(function(i, element) {\n\t\t\tthis.enter('pre-loading');\n\t\t\telement = $(element);\n\t\t\t$(new Image()).one('load', $.proxy(function(e) {\n\t\t\t\telement.attr('src', e.target.src);\n\t\t\t\telement.css('opacity', 1);\n\t\t\t\tthis.leave('pre-loading');\n\t\t\t\t!this.is('pre-loading') && !this.is('initializing') && this.refresh();\n\t\t\t}, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));\n\t\t}, this));\n\t};\n\n\t/**\n\t * Destroys the carousel.\n\t * @public\n\t */\n\tOwl.prototype.destroy = function() {\n\n\t\tthis.$element.off('.owl.core');\n\t\tthis.$stage.off('.owl.core');\n\t\t$(document).off('.owl.core');\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\twindow.clearTimeout(this.resizeTimer);\n\t\t\tthis.off(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tfor (var i in this._plugins) {\n\t\t\tthis._plugins[i].destroy();\n\t\t}\n\n\t\tthis.$stage.children('.cloned').remove();\n\n\t\tthis.$stage.unwrap();\n\t\tthis.$stage.children().contents().unwrap();\n\t\tthis.$stage.children().unwrap();\n\t\tthis.$stage.remove();\n\t\tthis.$element\n\t\t\t.removeClass(this.options.refreshClass)\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.removeClass(this.options.loadedClass)\n\t\t\t.removeClass(this.options.rtlClass)\n\t\t\t.removeClass(this.options.dragClass)\n\t\t\t.removeClass(this.options.grabClass)\n\t\t\t.attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\\\S+\\\\s', 'g'), ''))\n\t\t\t.removeData('owl.carousel');\n\t};\n\n\t/**\n\t * Operators to calculate right-to-left and left-to-right.\n\t * @protected\n\t * @param {Number} [a] - The left side operand.\n\t * @param {String} [o] - The operator.\n\t * @param {Number} [b] - The right side operand.\n\t */\n\tOwl.prototype.op = function(a, o, b) {\n\t\tvar rtl = this.settings.rtl;\n\t\tswitch (o) {\n\t\t\tcase '<':\n\t\t\t\treturn rtl ? a > b : a < b;\n\t\t\tcase '>':\n\t\t\t\treturn rtl ? a < b : a > b;\n\t\t\tcase '>=':\n\t\t\t\treturn rtl ? a <= b : a >= b;\n\t\t\tcase '<=':\n\t\t\t\treturn rtl ? a >= b : a <= b;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\t/**\n\t * Attaches to an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The event handler to attach.\n\t * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.\n\t */\n\tOwl.prototype.on = function(element, event, listener, capture) {\n\t\tif (element.addEventListener) {\n\t\t\telement.addEventListener(event, listener, capture);\n\t\t} else if (element.attachEvent) {\n\t\t\telement.attachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Detaches from an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The attached event handler to detach.\n\t * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.\n\t */\n\tOwl.prototype.off = function(element, event, listener, capture) {\n\t\tif (element.removeEventListener) {\n\t\t\telement.removeEventListener(event, listener, capture);\n\t\t} else if (element.detachEvent) {\n\t\t\telement.detachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Triggers a public event.\n\t * @todo Remove `status`, `relatedTarget` should be used instead.\n\t * @protected\n\t * @param {String} name - The event name.\n\t * @param {*} [data=null] - The event data.\n\t * @param {String} [namespace=carousel] - The event namespace.\n\t * @param {String} [state] - The state which is associated with the event.\n\t * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.\n\t * @returns {Event} - The event arguments.\n\t */\n\tOwl.prototype.trigger = function(name, data, namespace, state, enter) {\n\t\tvar status = {\n\t\t\titem: { count: this._items.length, index: this.current() }\n\t\t}, handler = $.camelCase(\n\t\t\t$.grep([ 'on', name, namespace ], function(v) { return v })\n\t\t\t\t.join('-').toLowerCase()\n\t\t), event = $.Event(\n\t\t\t[ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),\n\t\t\t$.extend({ relatedTarget: this }, status, data)\n\t\t);\n\n\t\tif (!this._supress[name]) {\n\t\t\t$.each(this._plugins, function(name, plugin) {\n\t\t\t\tif (plugin.onTrigger) {\n\t\t\t\t\tplugin.onTrigger(event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.register({ type: Owl.Type.Event, name: name });\n\t\t\tthis.$element.trigger(event);\n\n\t\t\tif (this.settings && typeof this.settings[handler] === 'function') {\n\t\t\t\tthis.settings[handler].call(this, event);\n\t\t\t}\n\t\t}\n\n\t\treturn event;\n\t};\n\n\t/**\n\t * Enters a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.enter = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tif (this._states.current[name] === undefined) {\n\t\t\t\tthis._states.current[name] = 0;\n\t\t\t}\n\n\t\t\tthis._states.current[name]++;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Leaves a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.leave = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tthis._states.current[name]--;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Registers an event or state.\n\t * @public\n\t * @param {Object} object - The event or state to register.\n\t */\n\tOwl.prototype.register = function(object) {\n\t\tif (object.type === Owl.Type.Event) {\n\t\t\tif (!$.event.special[object.name]) {\n\t\t\t\t$.event.special[object.name] = {};\n\t\t\t}\n\n\t\t\tif (!$.event.special[object.name].owl) {\n\t\t\t\tvar _default = $.event.special[object.name]._default;\n\t\t\t\t$.event.special[object.name]._default = function(e) {\n\t\t\t\t\tif (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {\n\t\t\t\t\t\treturn _default.apply(this, arguments);\n\t\t\t\t\t}\n\t\t\t\t\treturn e.namespace && e.namespace.indexOf('owl') > -1;\n\t\t\t\t};\n\t\t\t\t$.event.special[object.name].owl = true;\n\t\t\t}\n\t\t} else if (object.type === Owl.Type.State) {\n\t\t\tif (!this._states.tags[object.name]) {\n\t\t\t\tthis._states.tags[object.name] = object.tags;\n\t\t\t} else {\n\t\t\t\tthis._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);\n\t\t\t}\n\n\t\t\tthis._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {\n\t\t\t\treturn $.inArray(tag, this._states.tags[object.name]) === i;\n\t\t\t}, this));\n\t\t}\n\t};\n\n\t/**\n\t * Suppresses events.\n\t * @protected\n\t * @param {Array.} events - The events to suppress.\n\t */\n\tOwl.prototype.suppress = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tthis._supress[event] = true;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Releases suppressed events.\n\t * @protected\n\t * @param {Array.} events - The events to release.\n\t */\n\tOwl.prototype.release = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tdelete this._supress[event];\n\t\t}, this));\n\t};\n\n\t/**\n\t * Gets unified pointer coordinates from event.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} - The `mousedown` or `touchstart` event.\n\t * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.\n\t */\n\tOwl.prototype.pointer = function(event) {\n\t\tvar result = { x: null, y: null };\n\n\t\tevent = event.originalEvent || event || window.event;\n\n\t\tevent = event.touches && event.touches.length ?\n\t\t\tevent.touches[0] : event.changedTouches && event.changedTouches.length ?\n\t\t\t\tevent.changedTouches[0] : event;\n\n\t\tif (event.pageX) {\n\t\t\tresult.x = event.pageX;\n\t\t\tresult.y = event.pageY;\n\t\t} else {\n\t\t\tresult.x = event.clientX;\n\t\t\tresult.y = event.clientY;\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t/**\n\t * Determines if the input is a Number or something that can be coerced to a Number\n\t * @protected\n\t * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested\n\t * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number\n\t */\n\tOwl.prototype.isNumeric = function(number) {\n\t\treturn !isNaN(parseFloat(number));\n\t};\n\n\t/**\n\t * Gets the difference of two vectors.\n\t * @todo #261\n\t * @protected\n\t * @param {Object} - The first vector.\n\t * @param {Object} - The second vector.\n\t * @returns {Object} - The difference.\n\t */\n\tOwl.prototype.difference = function(first, second) {\n\t\treturn {\n\t\t\tx: first.x - second.x,\n\t\t\ty: first.y - second.y\n\t\t};\n\t};\n\n\t/**\n\t * The jQuery Plugin for the Owl Carousel\n\t * @todo Navigation plugin `next` and `prev`\n\t * @public\n\t */\n\t$.fn.owlCarousel = function(option) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\n\t\treturn this.each(function() {\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('owl.carousel');\n\n\t\t\tif (!data) {\n\t\t\t\tdata = new Owl(this, typeof option == 'object' && option);\n\t\t\t\t$this.data('owl.carousel', data);\n\n\t\t\t\t$.each([\n\t\t\t\t\t'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'\n\t\t\t\t], function(i, event) {\n\t\t\t\t\tdata.register({ type: Owl.Type.Event, name: event });\n\t\t\t\t\tdata.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {\n\t\t\t\t\t\tif (e.namespace && e.relatedTarget !== this) {\n\t\t\t\t\t\t\tthis.suppress([ event ]);\n\t\t\t\t\t\t\tdata[event].apply(this, [].slice.call(arguments, 1));\n\t\t\t\t\t\t\tthis.release([ event ]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, data));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof option == 'string' && option.charAt(0) !== '_') {\n\t\t\t\tdata[option].apply(data, args);\n\t\t\t}\n\t\t});\n\t};\n\n\t/**\n\t * The constructor for the jQuery Plugin\n\t * @public\n\t */\n\t$.fn.owlCarousel.Constructor = Owl;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * AutoRefresh Plugin\n * @version 2.3.4\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto refresh plugin.\n\t * @class The Auto Refresh Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoRefresh = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Refresh interval.\n\t\t * @protected\n\t\t * @type {number}\n\t\t */\n\t\tthis._interval = null;\n\n\t\t/**\n\t\t * Whether the element is currently visible or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._visible = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoRefresh) {\n\t\t\t\t\tthis.watch();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoRefresh.Defaults = {\n\t\tautoRefresh: true,\n\t\tautoRefreshInterval: 500\n\t};\n\n\t/**\n\t * Watches the element.\n\t */\n\tAutoRefresh.prototype.watch = function() {\n\t\tif (this._interval) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = this._core.isVisible();\n\t\tthis._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);\n\t};\n\n\t/**\n\t * Refreshes the element.\n\t */\n\tAutoRefresh.prototype.refresh = function() {\n\t\tif (this._core.isVisible() === this._visible) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = !this._visible;\n\n\t\tthis._core.$element.toggleClass('owl-hidden', !this._visible);\n\n\t\tthis._visible && (this._core.invalidate('width') && this._core.refresh());\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoRefresh.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\twindow.clearInterval(this._interval);\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Lazy Plugin\n * @version 2.3.4\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the lazy plugin.\n\t * @class The Lazy Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Lazy = function(carousel) {\n\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Already loaded items.\n\t\t * @protected\n\t\t * @type {Array.}\n\t\t */\n\t\tthis._loaded = [];\n\n\t\t/**\n\t\t * Event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!this._core.settings || !this._core.settings.lazyLoad) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ((e.property && e.property.name == 'position') || e.type == 'initialized') {\n\t\t\t\t\tvar settings = this._core.settings,\n\t\t\t\t\t\tn = (settings.center && Math.ceil(settings.items / 2) || settings.items),\n\t\t\t\t\t\ti = ((settings.center && n * -1) || 0),\n\t\t\t\t\t\tposition = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,\n\t\t\t\t\t\tclones = this._core.clones().length,\n\t\t\t\t\t\tload = $.proxy(function(i, v) { this.load(v) }, this);\n\t\t\t\t\t//TODO: Need documentation for this new option\n\t\t\t\t\tif (settings.lazyLoadEager > 0) {\n\t\t\t\t\t\tn += settings.lazyLoadEager;\n\t\t\t\t\t\t// If the carousel is looping also preload images that are to the \"left\"\n\t\t\t\t\t\tif (settings.loop) {\n position -= settings.lazyLoadEager;\n n++;\n }\n\t\t\t\t\t}\n\n\t\t\t\t\twhile (i++ < n) {\n\t\t\t\t\t\tthis.load(clones / 2 + this._core.relative(position));\n\t\t\t\t\t\tclones && $.each(this._core.clones(this._core.relative(position)), load);\n\t\t\t\t\t\tposition++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set the default options\n\t\tthis._core.options = $.extend({}, Lazy.Defaults, this._core.options);\n\n\t\t// register event handler\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tLazy.Defaults = {\n\t\tlazyLoad: false,\n\t\tlazyLoadEager: 0\n\t};\n\n\t/**\n\t * Loads all resources of an item at the specified position.\n\t * @param {Number} position - The absolute position of the item.\n\t * @protected\n\t */\n\tLazy.prototype.load = function(position) {\n\t\tvar $item = this._core.$stage.children().eq(position),\n\t\t\t$elements = $item && $item.find('.owl-lazy');\n\n\t\tif (!$elements || $.inArray($item.get(0), this._loaded) > -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t$elements.each($.proxy(function(index, element) {\n\t\t\tvar $element = $(element), image,\n url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src') || $element.attr('data-srcset');\n\n\t\t\tthis._core.trigger('load', { element: $element, url: url }, 'lazy');\n\n\t\t\tif ($element.is('img')) {\n\t\t\t\t$element.one('load.owl.lazy', $.proxy(function() {\n\t\t\t\t\t$element.css('opacity', 1);\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this)).attr('src', url);\n } else if ($element.is('source')) {\n $element.one('load.owl.lazy', $.proxy(function() {\n this._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n }, this)).attr('srcset', url);\n\t\t\t} else {\n\t\t\t\timage = new Image();\n\t\t\t\timage.onload = $.proxy(function() {\n\t\t\t\t\t$element.css({\n\t\t\t\t\t\t'background-image': 'url(\"' + url + '\")',\n\t\t\t\t\t\t'opacity': '1'\n\t\t\t\t\t});\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this);\n\t\t\t\timage.src = url;\n\t\t\t}\n\t\t}, this));\n\n\t\tthis._loaded.push($item.get(0));\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tLazy.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis._core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * AutoHeight Plugin\n * @version 2.3.4\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto height plugin.\n\t * @class The Auto Height Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoHeight = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\tthis._previousHeight = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight && e.property.name === 'position'){\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'loaded.owl.lazy': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight\n\t\t\t\t\t&& e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t\tthis._intervalId = null;\n\t\tvar refThis = this;\n\n\t\t// These changes have been taken from a PR by gavrochelegnou proposed in #1575\n\t\t// and have been made compatible with the latest jQuery version\n\t\t$(window).on('load', function() {\n\t\t\tif (refThis._core.settings.autoHeight) {\n\t\t\t\trefThis.update();\n\t\t\t}\n\t\t});\n\n\t\t// Autoresize the height of the carousel when window is resized\n\t\t// When carousel has images, the height is dependent on the width\n\t\t// and should also change on resize\n\t\t$(window).resize(function() {\n\t\t\tif (refThis._core.settings.autoHeight) {\n\t\t\t\tif (refThis._intervalId != null) {\n\t\t\t\t\tclearTimeout(refThis._intervalId);\n\t\t\t\t}\n\n\t\t\t\trefThis._intervalId = setTimeout(function() {\n\t\t\t\t\trefThis.update();\n\t\t\t\t}, 250);\n\t\t\t}\n\t\t});\n\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoHeight.Defaults = {\n\t\tautoHeight: false,\n\t\tautoHeightClass: 'owl-height'\n\t};\n\n\t/**\n\t * Updates the view.\n\t */\n\tAutoHeight.prototype.update = function() {\n\t\tvar start = this._core._current,\n\t\t\tend = start + this._core.settings.items,\n\t\t\tlazyLoadEnabled = this._core.settings.lazyLoad,\n\t\t\tvisible = this._core.$stage.children().toArray().slice(start, end),\n\t\t\theights = [],\n\t\t\tmaxheight = 0;\n\n\t\t$.each(visible, function(index, item) {\n\t\t\theights.push($(item).height());\n\t\t});\n\n\t\tmaxheight = Math.max.apply(null, heights);\n\n\t\tif (maxheight <= 1 && lazyLoadEnabled && this._previousHeight) {\n\t\t\tmaxheight = this._previousHeight;\n\t\t}\n\n\t\tthis._previousHeight = maxheight;\n\n\t\tthis._core.$stage.parent()\n\t\t\t.height(maxheight)\n\t\t\t.addClass(this._core.settings.autoHeightClass);\n\t};\n\n\tAutoHeight.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] !== 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Video Plugin\n * @version 2.3.4\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the video plugin.\n\t * @class The Video Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Video = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Cache all video URLs.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._videos = {};\n\n\t\t/**\n\t\t * Current playing item.\n\t\t * @protected\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis._playing = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @todo The cloned content removale is too late\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'resize.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.video && this.isInFullScreen()) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.is('resizing')) {\n\t\t\t\t\tthis._core.$stage.find('.cloned .owl-video-frame').remove();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'position' && this._playing) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar $element = $(e.content).find('.owl-video');\n\n\t\t\t\tif ($element.length) {\n\t\t\t\t\t$element.css('display', 'none');\n\t\t\t\t\tthis.fetch($element, $(e.content));\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Video.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\tthis._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {\n\t\t\tthis.play(e);\n\t\t}, this));\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tVideo.Defaults = {\n\t\tvideo: false,\n\t\tvideoHeight: false,\n\t\tvideoWidth: false\n\t};\n\n\t/**\n\t * Gets the video ID and the type (YouTube/Vimeo/vzaar only).\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {jQuery} item - The item containing the video.\n\t */\n\tVideo.prototype.fetch = function(target, item) {\n\t\t\tvar type = (function() {\n\t\t\t\t\tif (target.attr('data-vimeo-id')) {\n\t\t\t\t\t\treturn 'vimeo';\n\t\t\t\t\t} else if (target.attr('data-vzaar-id')) {\n\t\t\t\t\t\treturn 'vzaar'\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn 'youtube';\n\t\t\t\t\t}\n\t\t\t\t})(),\n\t\t\t\tid = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),\n\t\t\t\twidth = target.attr('data-width') || this._core.settings.videoWidth,\n\t\t\t\theight = target.attr('data-height') || this._core.settings.videoHeight,\n\t\t\t\turl = target.attr('href');\n\n\t\tif (url) {\n\n\t\t\t/*\n\t\t\t\t\tParses the id's out of the following urls (and probably more):\n\t\t\t\t\thttps://www.youtube.com/watch?v=:id\n\t\t\t\t\thttps://youtu.be/:id\n\t\t\t\t\thttps://vimeo.com/:id\n\t\t\t\t\thttps://vimeo.com/channels/:channel/:id\n\t\t\t\t\thttps://vimeo.com/groups/:group/videos/:id\n\t\t\t\t\thttps://app.vzaar.com/videos/:id\n\n\t\t\t\t\tVisual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F\n\t\t\t*/\n\n\t\t\tid = url.match(/(http:|https:|)\\/\\/(player.|www.|app.)?(vimeo\\.com|youtu(be\\.com|\\.be|be\\.googleapis\\.com|be\\-nocookie\\.com)|vzaar\\.com)\\/(video\\/|videos\\/|embed\\/|channels\\/.+\\/|groups\\/.+\\/|watch\\?v=|v\\/)?([A-Za-z0-9._%-]*)(\\&\\S+)?/);\n\n\t\t\tif (id[3].indexOf('youtu') > -1) {\n\t\t\t\ttype = 'youtube';\n\t\t\t} else if (id[3].indexOf('vimeo') > -1) {\n\t\t\t\ttype = 'vimeo';\n\t\t\t} else if (id[3].indexOf('vzaar') > -1) {\n\t\t\t\ttype = 'vzaar';\n\t\t\t} else {\n\t\t\t\tthrow new Error('Video URL not supported.');\n\t\t\t}\n\t\t\tid = id[6];\n\t\t} else {\n\t\t\tthrow new Error('Missing video URL.');\n\t\t}\n\n\t\tthis._videos[url] = {\n\t\t\ttype: type,\n\t\t\tid: id,\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\n\t\titem.attr('data-video', url);\n\n\t\tthis.thumbnail(target, this._videos[url]);\n\t};\n\n\t/**\n\t * Creates video thumbnail.\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {Object} info - The video info object.\n\t * @see `fetch`\n\t */\n\tVideo.prototype.thumbnail = function(target, video) {\n\t\tvar tnLink,\n\t\t\ticon,\n\t\t\tpath,\n\t\t\tdimensions = video.width && video.height ? 'width:' + video.width + 'px;height:' + video.height + 'px;' : '',\n\t\t\tcustomTn = target.find('img'),\n\t\t\tsrcType = 'src',\n\t\t\tlazyClass = '',\n\t\t\tsettings = this._core.settings,\n\t\t\tcreate = function(path) {\n\t\t\t\ticon = '
';\n\n\t\t\t\tif (settings.lazyLoad) {\n\t\t\t\t\ttnLink = $('
',{\n\t\t\t\t\t\t\"class\": 'owl-video-tn ' + lazyClass,\n\t\t\t\t\t\t\"srcType\": path\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\ttnLink = $( '
', {\n\t\t\t\t\t\t\"class\": \"owl-video-tn\",\n\t\t\t\t\t\t\"style\": 'opacity:1;background-image:url(' + path + ')'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\ttarget.after(tnLink);\n\t\t\t\ttarget.after(icon);\n\t\t\t};\n\n\t\t// wrap video content into owl-video-wrapper div\n\t\ttarget.wrap( $( '
', {\n\t\t\t\"class\": \"owl-video-wrapper\",\n\t\t\t\"style\": dimensions\n\t\t}));\n\n\t\tif (this._core.settings.lazyLoad) {\n\t\t\tsrcType = 'data-src';\n\t\t\tlazyClass = 'owl-lazy';\n\t\t}\n\n\t\t// custom thumbnail\n\t\tif (customTn.length) {\n\t\t\tcreate(customTn.attr(srcType));\n\t\t\tcustomTn.remove();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (video.type === 'youtube') {\n\t\t\tpath = \"//img.youtube.com/vi/\" + video.id + \"/hqdefault.jpg\";\n\t\t\tcreate(path);\n\t\t} else if (video.type === 'vimeo') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vimeo.com/api/v2/video/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data[0].thumbnail_large;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (video.type === 'vzaar') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vzaar.com/api/videos/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data.framegrab_url;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Stops the current video.\n\t * @public\n\t */\n\tVideo.prototype.stop = function() {\n\t\tthis._core.trigger('stop', null, 'video');\n\t\tthis._playing.find('.owl-video-frame').remove();\n\t\tthis._playing.removeClass('owl-video-playing');\n\t\tthis._playing = null;\n\t\tthis._core.leave('playing');\n\t\tthis._core.trigger('stopped', null, 'video');\n\t};\n\n\t/**\n\t * Starts the current video.\n\t * @public\n\t * @param {Event} event - The event arguments.\n\t */\n\tVideo.prototype.play = function(event) {\n\t\tvar target = $(event.target),\n\t\t\titem = target.closest('.' + this._core.settings.itemClass),\n\t\t\tvideo = this._videos[item.attr('data-video')],\n\t\t\twidth = video.width || '100%',\n\t\t\theight = video.height || this._core.$stage.height(),\n\t\t\thtml,\n\t\t\tiframe;\n\n\t\tif (this._playing) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._core.enter('playing');\n\t\tthis._core.trigger('play', null, 'video');\n\n\t\titem = this._core.items(this._core.relative(item.index()));\n\n\t\tthis._core.reset(item.index());\n\n\t\thtml = $( '' );\n\t\thtml.attr( 'height', height );\n\t\thtml.attr( 'width', width );\n\t\tif (video.type === 'youtube') {\n\t\t\thtml.attr( 'src', '//www.youtube.com/embed/' + video.id + '?autoplay=1&rel=0&v=' + video.id );\n\t\t} else if (video.type === 'vimeo') {\n\t\t\thtml.attr( 'src', '//player.vimeo.com/video/' + video.id + '?autoplay=1' );\n\t\t} else if (video.type === 'vzaar') {\n\t\t\thtml.attr( 'src', '//view.vzaar.com/' + video.id + '/player?autoplay=true' );\n\t\t}\n\n\t\tiframe = $(html).wrap( '
' ).insertAfter(item.find('.owl-video'));\n\n\t\tthis._playing = item.addClass('owl-video-playing');\n\t};\n\n\t/**\n\t * Checks whether an video is currently in full screen mode or not.\n\t * @todo Bad style because looks like a readonly method but changes members.\n\t * @protected\n\t * @returns {Boolean}\n\t */\n\tVideo.prototype.isInFullScreen = function() {\n\t\tvar element = document.fullscreenElement || document.mozFullScreenElement ||\n\t\t\t\tdocument.webkitFullscreenElement;\n\n\t\treturn element && $(element).parent().hasClass('owl-video-frame');\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tVideo.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis._core.$element.off('click.owl.video');\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Video = Video;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Animate Plugin\n * @version 2.3.4\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the animate plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Animate = function(scope) {\n\t\tthis.core = scope;\n\t\tthis.core.options = $.extend({}, Animate.Defaults, this.core.options);\n\t\tthis.swapping = true;\n\t\tthis.previous = undefined;\n\t\tthis.next = undefined;\n\n\t\tthis.handlers = {\n\t\t\t'change.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.previous = this.core.current();\n\t\t\t\t\tthis.next = e.property.value;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.swapping = e.type == 'translated';\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'translate.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {\n\t\t\t\t\tthis.swap();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\tthis.core.$element.on(this.handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAnimate.Defaults = {\n\t\tanimateOut: false,\n\t\tanimateIn: false\n\t};\n\n\t/**\n\t * Toggles the animation classes whenever an translations starts.\n\t * @protected\n\t * @returns {Boolean|undefined}\n\t */\n\tAnimate.prototype.swap = function() {\n\n\t\tif (this.core.settings.items !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!$.support.animation || !$.support.transition) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.core.speed(0);\n\n\t\tvar left,\n\t\t\tclear = $.proxy(this.clear, this),\n\t\t\tprevious = this.core.$stage.children().eq(this.previous),\n\t\t\tnext = this.core.$stage.children().eq(this.next),\n\t\t\tincoming = this.core.settings.animateIn,\n\t\t\toutgoing = this.core.settings.animateOut;\n\n\t\tif (this.core.current() === this.previous) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (outgoing) {\n\t\t\tleft = this.core.coordinates(this.previous) - this.core.coordinates(this.next);\n\t\t\tprevious.one($.support.animation.end, clear)\n\t\t\t\t.css( { 'left': left + 'px' } )\n\t\t\t\t.addClass('animated owl-animated-out')\n\t\t\t\t.addClass(outgoing);\n\t\t}\n\n\t\tif (incoming) {\n\t\t\tnext.one($.support.animation.end, clear)\n\t\t\t\t.addClass('animated owl-animated-in')\n\t\t\t\t.addClass(incoming);\n\t\t}\n\t};\n\n\tAnimate.prototype.clear = function(e) {\n\t\t$(e.target).css( { 'left': '' } )\n\t\t\t.removeClass('animated owl-animated-out owl-animated-in')\n\t\t\t.removeClass(this.core.settings.animateIn)\n\t\t\t.removeClass(this.core.settings.animateOut);\n\t\tthis.core.onTransitionEnd();\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tAnimate.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis.core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Animate = Animate;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Autoplay Plugin\n * @version 2.3.4\n * @author Bartosz Wojciechowski\n * @author Artus Kolanowski\n * @author David Deutsch\n * @author Tom De Caluwé\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the autoplay plugin.\n\t * @class The Autoplay Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Autoplay = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * The autoplay timeout id.\n\t\t * @type {Number}\n\t\t */\n\t\tthis._call = null;\n\n\t\t/**\n\t\t * Depending on the state of the plugin, this variable contains either\n\t\t * the start time of the timer or the current timer value if it's\n\t\t * paused. Since we start in a paused state we initialize the timer\n\t\t * value.\n\t\t * @type {Number}\n\t\t */\n\t\tthis._time = 0;\n\n\t\t/**\n\t\t * Stores the timeout currently used.\n\t\t * @type {Number}\n\t\t */\n\t\tthis._timeout = 0;\n\n\t\t/**\n\t\t * Indicates whenever the autoplay is paused.\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._paused = true;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'settings') {\n\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\tthis.play();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.stop();\n\t\t\t\t\t}\n\t\t\t\t} else if (e.namespace && e.property.name === 'position' && this._paused) {\n\t\t\t\t\t// Reset the timer. This code is triggered when the position\n\t\t\t\t\t// of the carousel was changed through user interaction.\n\t\t\t\t\tthis._time = 0;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoplay) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'play.owl.autoplay': $.proxy(function(e, t, s) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.play(t, s);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'stop.owl.autoplay': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseover.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseleave.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchstart.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchend.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Autoplay.Defaults, this._core.options);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoplay.Defaults = {\n\t\tautoplay: false,\n\t\tautoplayTimeout: 5000,\n\t\tautoplayHoverPause: false,\n\t\tautoplaySpeed: false\n\t};\n\n\t/**\n\t * Transition to the next slide and set a timeout for the next transition.\n\t * @private\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t */\n\tAutoplay.prototype._next = function(speed) {\n\t\tthis._call = window.setTimeout(\n\t\t\t$.proxy(this._next, this, speed),\n\t\t\tthis._timeout * (Math.round(this.read() / this._timeout) + 1) - this.read()\n\t\t);\n\n\t\tif (this._core.is('interacting') || document.hidden) {\n\t\t\treturn;\n\t\t}\n\t\tthis._core.next(speed || this._core.settings.autoplaySpeed);\n\t}\n\n\t/**\n\t * Reads the current timer value when the timer is playing.\n\t * @public\n\t */\n\tAutoplay.prototype.read = function() {\n\t\treturn new Date().getTime() - this._time;\n\t};\n\n\t/**\n\t * Starts the autoplay.\n\t * @public\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t */\n\tAutoplay.prototype.play = function(timeout, speed) {\n\t\tvar elapsed;\n\n\t\tif (!this._core.is('rotating')) {\n\t\t\tthis._core.enter('rotating');\n\t\t}\n\n\t\ttimeout = timeout || this._core.settings.autoplayTimeout;\n\n\t\t// Calculate the elapsed time since the last transition. If the carousel\n\t\t// wasn't playing this calculation will yield zero.\n\t\telapsed = Math.min(this._time % (this._timeout || timeout), timeout);\n\n\t\tif (this._paused) {\n\t\t\t// Start the clock.\n\t\t\tthis._time = this.read();\n\t\t\tthis._paused = false;\n\t\t} else {\n\t\t\t// Clear the active timeout to allow replacement.\n\t\t\twindow.clearTimeout(this._call);\n\t\t}\n\n\t\t// Adjust the origin of the timer to match the new timeout value.\n\t\tthis._time += this.read() % timeout - elapsed;\n\n\t\tthis._timeout = timeout;\n\t\tthis._call = window.setTimeout($.proxy(this._next, this, speed), timeout - elapsed);\n\t};\n\n\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.stop = function() {\n\t\tif (this._core.is('rotating')) {\n\t\t\t// Reset the clock.\n\t\t\tthis._time = 0;\n\t\t\tthis._paused = true;\n\n\t\t\twindow.clearTimeout(this._call);\n\t\t\tthis._core.leave('rotating');\n\t\t}\n\t};\n\n\t/**\n\t * Pauses the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.pause = function() {\n\t\tif (this._core.is('rotating') && !this._paused) {\n\t\t\t// Pause the clock.\n\t\t\tthis._time = this.read();\n\t\t\tthis._paused = true;\n\n\t\t\twindow.clearTimeout(this._call);\n\t\t}\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoplay.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis.stop();\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Navigation Plugin\n * @version 2.3.4\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\t'use strict';\n\n\t/**\n\t * Creates the navigation plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} carousel - The Owl Carousel.\n\t */\n\tvar Navigation = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Indicates whether the plugin is initialized or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._initialized = false;\n\n\t\t/**\n\t\t * The current paging indexes.\n\t\t * @protected\n\t\t * @type {Array}\n\t\t */\n\t\tthis._pages = [];\n\n\t\t/**\n\t\t * All DOM elements of the user interface.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._controls = {};\n\n\t\t/**\n\t\t * Markup for an indicator.\n\t\t * @protected\n\t\t * @type {Array.}\n\t\t */\n\t\tthis._templates = [];\n\n\t\t/**\n\t\t * The carousel element.\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis.$element = this._core.$element;\n\n\t\t/**\n\t\t * Overridden methods of the carousel.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._overrides = {\n\t\t\tnext: this._core.next,\n\t\t\tprev: this._core.prev,\n\t\t\tto: this._core.to\n\t\t};\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.push('
' +\n\t\t\t\t\t\t$(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '
');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'added.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 0, this._templates.pop());\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'remove.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 1);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.draw();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && !this._initialized) {\n\t\t\t\t\tthis._core.trigger('initialize', null, 'navigation');\n\t\t\t\t\tthis.initialize();\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._initialized = true;\n\t\t\t\t\tthis._core.trigger('initialized', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._initialized) {\n\t\t\t\t\tthis._core.trigger('refresh', null, 'navigation');\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._core.trigger('refreshed', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Navigation.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t * @todo Rename `slideBy` to `navBy`\n\t */\n\tNavigation.Defaults = {\n\t\tnav: false,\n\t\tnavText: [\n\t\t\t'',\n\t\t\t''\n\t\t],\n\t\tnavSpeed: false,\n\t\tnavElement: 'button type=\"button\" role=\"presentation\"',\n\t\tnavContainer: false,\n\t\tnavContainerClass: 'owl-nav',\n\t\tnavClass: [\n\t\t\t'owl-prev',\n\t\t\t'owl-next'\n\t\t],\n\t\tslideBy: 1,\n\t\tdotClass: 'owl-dot',\n\t\tdotsClass: 'owl-dots',\n\t\tdots: true,\n\t\tdotsEach: false,\n\t\tdotsData: false,\n\t\tdotsSpeed: false,\n\t\tdotsContainer: false\n\t};\n\n\t/**\n\t * Initializes the layout of the plugin and extends the carousel.\n\t * @protected\n\t */\n\tNavigation.prototype.initialize = function() {\n\t\tvar override,\n\t\t\tsettings = this._core.settings;\n\n\t\t// create DOM structure for relative navigation\n\t\tthis._controls.$relative = (settings.navContainer ? $(settings.navContainer)\n\t\t\t: $('
').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');\n\n\t\tthis._controls.$previous = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[0])\n\t\t\t.html(settings.navText[0])\n\t\t\t.prependTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.prev(settings.navSpeed);\n\t\t\t}, this));\n\t\tthis._controls.$next = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[1])\n\t\t\t.html(settings.navText[1])\n\t\t\t.appendTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.next(settings.navSpeed);\n\t\t\t}, this));\n\n\t\t// create DOM structure for absolute navigation\n\t\tif (!settings.dotsData) {\n\t\t\tthis._templates = [ $('',\n closeClass: 'toast-close-button',\n newestOnTop: true,\n preventDuplicates: false,\n progressBar: false,\n progressClass: 'toast-progress',\n rtl: false\n };\n }\n\n function publish(args) {\n if (!listener) { return; }\n listener(args);\n }\n\n function notify(map) {\n var options = getOptions();\n var iconClass = map.iconClass || options.iconClass;\n\n if (typeof (map.optionsOverride) !== 'undefined') {\n options = $.extend(options, map.optionsOverride);\n iconClass = map.optionsOverride.iconClass || iconClass;\n }\n\n if (shouldExit(options, map)) { return; }\n\n toastId++;\n\n $container = getContainer(options, true);\n\n var intervalId = null;\n var $toastElement = $('
');\n var $titleElement = $('
');\n var $messageElement = $('
');\n var $progressElement = $('
');\n var $closeElement = $(options.closeHtml);\n var progressBar = {\n intervalId: null,\n hideEta: null,\n maxHideTime: null\n };\n var response = {\n toastId: toastId,\n state: 'visible',\n startTime: new Date(),\n options: options,\n map: map\n };\n\n personalizeToast();\n\n displayToast();\n\n handleEvents();\n\n publish(response);\n\n if (options.debug && console) {\n console.log(response);\n }\n\n return $toastElement;\n\n function escapeHtml(source) {\n if (source == null) {\n source = '';\n }\n\n return source\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(//g, '>');\n }\n\n function personalizeToast() {\n setIcon();\n setTitle();\n setMessage();\n setCloseButton();\n setProgressBar();\n setRTL();\n setSequence();\n setAria();\n }\n\n function setAria() {\n var ariaValue = '';\n switch (map.iconClass) {\n case 'toast-success':\n case 'toast-info':\n ariaValue = 'polite';\n break;\n default:\n ariaValue = 'assertive';\n }\n $toastElement.attr('aria-live', ariaValue);\n }\n\n function handleEvents() {\n if (options.closeOnHover) {\n $toastElement.hover(stickAround, delayedHideToast);\n }\n\n if (!options.onclick && options.tapToDismiss) {\n $toastElement.click(hideToast);\n }\n\n if (options.closeButton && $closeElement) {\n $closeElement.click(function (event) {\n if (event.stopPropagation) {\n event.stopPropagation();\n } else if (event.cancelBubble !== undefined && event.cancelBubble !== true) {\n event.cancelBubble = true;\n }\n\n if (options.onCloseClick) {\n options.onCloseClick(event);\n }\n\n hideToast(true);\n });\n }\n\n if (options.onclick) {\n $toastElement.click(function (event) {\n options.onclick(event);\n hideToast();\n });\n }\n }\n\n function displayToast() {\n $toastElement.hide();\n\n $toastElement[options.showMethod](\n {duration: options.showDuration, easing: options.showEasing, complete: options.onShown}\n );\n\n if (options.timeOut > 0) {\n intervalId = setTimeout(hideToast, options.timeOut);\n progressBar.maxHideTime = parseFloat(options.timeOut);\n progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n if (options.progressBar) {\n progressBar.intervalId = setInterval(updateProgress, 10);\n }\n }\n }\n\n function setIcon() {\n if (map.iconClass) {\n $toastElement.addClass(options.toastClass).addClass(iconClass);\n }\n }\n\n function setSequence() {\n if (options.newestOnTop) {\n $container.prepend($toastElement);\n } else {\n $container.append($toastElement);\n }\n }\n\n function setTitle() {\n if (map.title) {\n var suffix = map.title;\n if (options.escapeHtml) {\n suffix = escapeHtml(map.title);\n }\n $titleElement.append(suffix).addClass(options.titleClass);\n $toastElement.append($titleElement);\n }\n }\n\n function setMessage() {\n if (map.message) {\n var suffix = map.message;\n if (options.escapeHtml) {\n suffix = escapeHtml(map.message);\n }\n $messageElement.append(suffix).addClass(options.messageClass);\n $toastElement.append($messageElement);\n }\n }\n\n function setCloseButton() {\n if (options.closeButton) {\n $closeElement.addClass(options.closeClass).attr('role', 'button');\n $toastElement.prepend($closeElement);\n }\n }\n\n function setProgressBar() {\n if (options.progressBar) {\n $progressElement.addClass(options.progressClass);\n $toastElement.prepend($progressElement);\n }\n }\n\n function setRTL() {\n if (options.rtl) {\n $toastElement.addClass('rtl');\n }\n }\n\n function shouldExit(options, map) {\n if (options.preventDuplicates) {\n if (map.message === previousToast) {\n return true;\n } else {\n previousToast = map.message;\n }\n }\n return false;\n }\n\n function hideToast(override) {\n var method = override && options.closeMethod !== false ? options.closeMethod : options.hideMethod;\n var duration = override && options.closeDuration !== false ?\n options.closeDuration : options.hideDuration;\n var easing = override && options.closeEasing !== false ? options.closeEasing : options.hideEasing;\n if ($(':focus', $toastElement).length && !override) {\n return;\n }\n clearTimeout(progressBar.intervalId);\n return $toastElement[method]({\n duration: duration,\n easing: easing,\n complete: function () {\n removeToast($toastElement);\n clearTimeout(intervalId);\n if (options.onHidden && response.state !== 'hidden') {\n options.onHidden();\n }\n response.state = 'hidden';\n response.endTime = new Date();\n publish(response);\n }\n });\n }\n\n function delayedHideToast() {\n if (options.timeOut > 0 || options.extendedTimeOut > 0) {\n intervalId = setTimeout(hideToast, options.extendedTimeOut);\n progressBar.maxHideTime = parseFloat(options.extendedTimeOut);\n progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n }\n }\n\n function stickAround() {\n clearTimeout(intervalId);\n progressBar.hideEta = 0;\n $toastElement.stop(true, true)[options.showMethod](\n {duration: options.showDuration, easing: options.showEasing}\n );\n }\n\n function updateProgress() {\n var percentage = ((progressBar.hideEta - (new Date().getTime())) / progressBar.maxHideTime) * 100;\n $progressElement.width(percentage + '%');\n }\n }\n\n function getOptions() {\n return $.extend({}, getDefaults(), toastr.options);\n }\n\n function removeToast($toastElement) {\n if (!$container) { $container = getContainer(); }\n if ($toastElement.is(':visible')) {\n return;\n }\n $toastElement.remove();\n $toastElement = null;\n if ($container.children().length === 0) {\n $container.remove();\n previousToast = undefined;\n }\n }\n\n })();\n });\n}(typeof define === 'function' && define.amd ? define : function (deps, factory) {\n if (typeof module !== 'undefined' && module.exports) { //Node\n module.exports = factory(require('jquery'));\n } else {\n window.toastr = factory(window.jQuery);\n }\n}));\n"],"sourceRoot":""}