{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js","webpack:///./assets/js/wp-soup-fancybox.js","webpack:///external \"jQuery\""],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","document","$","undefined","console","info","stuff","fn","fancybox","div","$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","el","createElement","transitions","transition","OTransition","MozTransition","WebkitTransition","style","forceRedraw","$el","length","offsetHeight","mergeOpts","opts1","opts2","rez","extend","each","isArray","FancyBox","content","opts","index","this","isPlainObject","isMobile","currIndex","parseInt","prevIndex","prevPos","currPos","firstRun","group","slides","addContent","init","$container","buttonStr","self","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","items","makeArray","$item","found","src","srcParts","options","$orig","contentType","charAt","inArray","$thumb","$trigger","thumb","caption","apply","split","shift","filter","push","keys","updateControls","Thumbs","isActive","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","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","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","domRect","done","cleanUp","$focus","scrollX","scrollY","args","Array","slice","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","decodeURIComponent","p1","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","FancyThumbs","$grid","$list","list","innerHTML","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","nl"],"mappings":"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","file":"/dist/js/site/european-solar-theme-fancybox.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n","// ==================================================\n// fancyBox v3.5.7\n//\n// Licensed GPLv3 for open source use\n// or fancyBox Commercial License for commercial use\n//\n// http://fancyapps.com/fancybox/\n// Copyright 2019 fancyApps\n//\n// ==================================================\n(function (window, document, $, undefined) {\r\n \"use strict\";\r\n\r\n window.console = window.console || {\r\n info: function (stuff) {}\r\n };\r\n\r\n // If there's no jQuery, fancyBox can't work\r\n // =========================================\r\n\r\n if (!$) {\r\n return;\r\n }\r\n\r\n // Check if fancyBox is already initialized\r\n // ========================================\r\n\r\n if ($.fn.fancybox) {\r\n console.info(\"fancyBox already initialized\");\r\n\r\n return;\r\n }\r\n\r\n // Private default settings\r\n // ========================\r\n\r\n var defaults = {\r\n // Close existing modals\r\n // Set this to false if you do not need to stack multiple instances\r\n closeExisting: false,\r\n\r\n // Enable infinite gallery navigation\r\n loop: false,\r\n\r\n // Horizontal space between slides\r\n gutter: 50,\r\n\r\n // Enable keyboard navigation\r\n keyboard: true,\r\n\r\n // Should allow caption to overlap the content\r\n preventCaptionOverlap: true,\r\n\r\n // Should display navigation arrows at the screen edges\r\n arrows: true,\r\n\r\n // Should display counter at the top left corner\r\n infobar: true,\r\n\r\n // Should display close button (using `btnTpl.smallBtn` template) over the content\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically enabled for \"html\", \"inline\" or \"ajax\" items\r\n smallBtn: \"auto\",\r\n\r\n // Should display toolbar (buttons at the top)\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically hidden if \"smallBtn\" is enabled\r\n toolbar: \"auto\",\r\n\r\n // What buttons should appear in the top right corner.\r\n // Buttons will be created using templates from `btnTpl` option\r\n // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\r\n buttons: [\r\n \"zoom\",\r\n //\"share\",\r\n \"slideShow\",\r\n //\"fullScreen\",\r\n //\"download\",\r\n \"thumbs\",\r\n \"close\"\r\n ],\r\n\r\n // Detect \"idle\" time in seconds\r\n idleTime: 3,\r\n\r\n // Disable right-click and use simple image protection for images\r\n protect: false,\r\n\r\n // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\r\n modal: false,\r\n\r\n image: {\r\n // Wait for images to load before displaying\r\n // true - wait for image to load and then display;\r\n // false - display thumbnail and load the full-sized image over top,\r\n // requires predefined image dimensions (`data-width` and `data-height` attributes)\r\n preload: false\r\n },\r\n\r\n ajax: {\r\n // Object containing settings for ajax request\r\n settings: {\r\n // This helps to indicate that request comes from the modal\r\n // Feel free to change naming\r\n data: {\r\n fancybox: true\r\n }\r\n }\r\n },\r\n\r\n iframe: {\r\n // Iframe template\r\n tpl: '',\r\n\r\n // Preload iframe before displaying it\r\n // This allows to calculate iframe content width and height\r\n // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\r\n preload: true,\r\n\r\n // Custom CSS styling for iframe wrapping element\r\n // You can use this to set custom iframe dimensions\r\n css: {},\r\n\r\n // Iframe tag attributes\r\n attr: {\r\n scrolling: \"auto\"\r\n }\r\n },\r\n\r\n // For HTML5 video only\r\n video: {\r\n tpl: '\",\r\n format: \"\", // custom video format\r\n autoStart: true\r\n },\r\n\r\n // Default content type if cannot be detected automatically\r\n defaultType: \"image\",\r\n\r\n // Open/close animation type\r\n // Possible values:\r\n // false - disable\r\n // \"zoom\" - zoom images from/to thumbnail\r\n // \"fade\"\r\n // \"zoom-in-out\"\r\n //\r\n animationEffect: \"zoom\",\r\n\r\n // Duration in ms for open/close animation\r\n animationDuration: 366,\r\n\r\n // Should image change opacity while zooming\r\n // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\r\n zoomOpacity: \"auto\",\r\n\r\n // Transition effect between slides\r\n //\r\n // Possible values:\r\n // false - disable\r\n // \"fade'\r\n // \"slide'\r\n // \"circular'\r\n // \"tube'\r\n // \"zoom-in-out'\r\n // \"rotate'\r\n //\r\n transitionEffect: \"fade\",\r\n\r\n // Duration in ms for transition animation\r\n transitionDuration: 366,\r\n\r\n // Custom CSS class for slide element\r\n slideClass: \"\",\r\n\r\n // Custom CSS class for layout\r\n baseClass: \"\",\r\n\r\n // Base template for layout\r\n baseTpl: '
' +\r\n '
' +\r\n '
' +\r\n '
 / 
' +\r\n '
{{buttons}}
' +\r\n '
{{arrows}}
' +\r\n '
' +\r\n '
' +\r\n \"
\" +\r\n \"
\",\r\n\r\n // Loading indicator template\r\n spinnerTpl: '
',\r\n\r\n // Error message template\r\n errorTpl: '

{{ERROR}}

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

Hi!

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

{{SHARE}}

\" +\r\n \"

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

\" +\r\n '

' +\r\n \"
\"\r\n }\r\n });\r\n\r\n function escapeHtml(string) {\r\n var entityMap = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': \""\",\r\n \"'\": \"'\",\r\n \"/\": \"/\",\r\n \"`\": \"`\",\r\n \"=\": \"=\"\r\n };\r\n\r\n return String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n return entityMap[s];\r\n });\r\n }\r\n\r\n $(document).on(\"click\", \"[data-fancybox-share]\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n current = instance.current || null,\r\n url,\r\n tpl;\r\n\r\n if (!current) {\r\n return;\r\n }\r\n\r\n if ($.type(current.opts.share.url) === \"function\") {\r\n url = current.opts.share.url.apply(current, [instance, current]);\r\n }\r\n\r\n tpl = current.opts.share.tpl\r\n .replace(/\\{\\{media\\}\\}/g, current.type === \"image\" ? encodeURIComponent(current.src) : \"\")\r\n .replace(/\\{\\{url\\}\\}/g, encodeURIComponent(url))\r\n .replace(/\\{\\{url_raw\\}\\}/g, escapeHtml(url))\r\n .replace(/\\{\\{descr\\}\\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : \"\");\r\n\r\n $.fancybox.open({\r\n src: instance.translate(instance, tpl),\r\n type: \"html\",\r\n opts: {\r\n touch: false,\r\n animationEffect: false,\r\n afterLoad: function (shareInstance, shareCurrent) {\r\n // Close self if parent instance is closing\r\n instance.$refs.container.one(\"beforeClose.fb\", function () {\r\n shareInstance.close(null, 0);\r\n });\r\n\r\n // Opening links in a popup window\r\n shareCurrent.$content.find(\".fancybox-share__button\").click(function () {\r\n window.open(this.href, \"Share\", \"width=550, height=450\");\r\n return false;\r\n });\r\n },\r\n mobile: {\r\n autoFocus: false\r\n }\r\n }\r\n });\r\n });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n // Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n if (!$.escapeSelector) {\r\n $.escapeSelector = function (sel) {\r\n var rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n var fcssescape = function (ch, asCodePoint) {\r\n if (asCodePoint) {\r\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n if (ch === \"\\0\") {\r\n return \"\\uFFFD\";\r\n }\r\n\r\n // Control characters and (dependent upon position) numbers get escaped as code points\r\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\r\n }\r\n\r\n // Other potentially-special ASCII characters get backslash-escaped\r\n return \"\\\\\" + ch;\r\n };\r\n\r\n return (sel + \"\").replace(rcssescape, fcssescape);\r\n };\r\n }\r\n\r\n // Get info about gallery name and current index from url\r\n function parseUrl() {\r\n var hash = window.location.hash.substr(1),\r\n rez = hash.split(\"-\"),\r\n index = rez.length > 1 && /^\\+?\\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,\r\n gallery = rez.join(\"-\");\r\n\r\n return {\r\n hash: hash,\r\n /* Index is starting from 1 */\r\n index: index < 1 ? 1 : index,\r\n gallery: gallery\r\n };\r\n }\r\n\r\n // Trigger click evnt on links to open new fancyBox instance\r\n function triggerFromUrl(url) {\r\n if (url.gallery !== \"\") {\r\n // If we can find element matching 'data-fancybox' atribute,\r\n // then triggering click event should start fancyBox\r\n $(\"[data-fancybox='\" + $.escapeSelector(url.gallery) + \"']\")\r\n .eq(url.index - 1)\r\n .focus()\r\n .trigger(\"click.fb-start\");\r\n }\r\n }\r\n\r\n // Get gallery name from current instance\r\n function getGalleryID(instance) {\r\n var opts, ret;\r\n\r\n if (!instance) {\r\n return false;\r\n }\r\n\r\n opts = instance.current ? instance.current.opts : instance.opts;\r\n ret = opts.hash || (opts.$orig ? opts.$orig.data(\"fancybox\") || opts.$orig.data(\"fancybox-trigger\") : \"\");\r\n\r\n return ret === \"\" ? false : ret;\r\n }\r\n\r\n // Start when DOM becomes ready\r\n $(function () {\r\n // Check if user has disabled this module\r\n if ($.fancybox.defaults.hash === false) {\r\n return;\r\n }\r\n\r\n // Update hash when opening/closing fancyBox\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var url, gallery;\r\n\r\n if (instance.group[instance.currIndex].opts.hash === false) {\r\n return;\r\n }\r\n\r\n url = parseUrl();\r\n gallery = getGalleryID(instance);\r\n\r\n // Make sure gallery start index matches index from hash\r\n if (gallery && url.gallery && gallery == url.gallery) {\r\n instance.currIndex = url.index - 1;\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var gallery;\r\n\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n // Check if need to update window hash\r\n gallery = getGalleryID(instance);\r\n\r\n if (!gallery) {\r\n return;\r\n }\r\n\r\n // Variable containing last hash value set by fancyBox\r\n // It will be used to determine if fancyBox needs to close after hash change is detected\r\n instance.currentHash = gallery + (instance.group.length > 1 ? \"-\" + (current.index + 1) : \"\");\r\n\r\n // If current hash is the same (this instance most likely is opened by hashchange), then do nothing\r\n if (window.location.hash === \"#\" + instance.currentHash) {\r\n return;\r\n }\r\n\r\n if (firstRun && !instance.origHash) {\r\n instance.origHash = window.location.hash;\r\n }\r\n\r\n if (instance.hashTimer) {\r\n clearTimeout(instance.hashTimer);\r\n }\r\n\r\n // Update hash\r\n instance.hashTimer = setTimeout(function () {\r\n if (\"replaceState\" in window.history) {\r\n window.history[firstRun ? \"pushState\" : \"replaceState\"]({},\r\n document.title,\r\n window.location.pathname + window.location.search + \"#\" + instance.currentHash\r\n );\r\n\r\n if (firstRun) {\r\n instance.hasCreatedHistory = true;\r\n }\r\n } else {\r\n window.location.hash = instance.currentHash;\r\n }\r\n\r\n instance.hashTimer = null;\r\n }, 300);\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance, current) {\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n clearTimeout(instance.hashTimer);\r\n\r\n // Goto previous history entry\r\n if (instance.currentHash && instance.hasCreatedHistory) {\r\n window.history.back();\r\n } else if (instance.currentHash) {\r\n if (\"replaceState\" in window.history) {\r\n window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || \"\"));\r\n } else {\r\n window.location.hash = instance.origHash;\r\n }\r\n }\r\n\r\n instance.currentHash = null;\r\n }\r\n });\r\n\r\n // Check if need to start/close after url has changed\r\n $(window).on(\"hashchange.fb\", function () {\r\n var url = parseUrl(),\r\n fb = null;\r\n\r\n // Find last fancyBox instance that has \"hash\"\r\n $.each(\r\n $(\".fancybox-container\")\r\n .get()\r\n .reverse(),\r\n function (index, value) {\r\n var tmp = $(value).data(\"FancyBox\");\r\n\r\n if (tmp && tmp.currentHash) {\r\n fb = tmp;\r\n return false;\r\n }\r\n }\r\n );\r\n\r\n if (fb) {\r\n // Now, compare hash values\r\n if (fb.currentHash !== url.gallery + \"-\" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {\r\n fb.currentHash = null;\r\n\r\n fb.close();\r\n }\r\n } else if (url.gallery !== \"\") {\r\n triggerFromUrl(url);\r\n }\r\n });\r\n\r\n // Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n setTimeout(function () {\r\n if (!$.fancybox.getInstance()) {\r\n triggerFromUrl(parseUrl());\r\n }\r\n }, 50);\r\n });\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// Wheel\r\n// Basic mouse weheel support for gallery navigation\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var prevTime = new Date().getTime();\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance, current) {\r\n instance.$refs.stage.on(\"mousewheel DOMMouseScroll wheel MozMousePixelScroll\", function (e) {\r\n var current = instance.current,\r\n currTime = new Date().getTime();\r\n\r\n if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === \"auto\" && current.type !== \"image\")) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (current.$slide.hasClass(\"fancybox-animated\")) {\r\n return;\r\n }\r\n\r\n e = e.originalEvent || e;\r\n\r\n if (currTime - prevTime < 250) {\r\n return;\r\n }\r\n\r\n prevTime = currTime;\r\n\r\n instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? \"next\" : \"previous\"]();\r\n });\r\n }\r\n });\r\n})(document, jQuery);","import fancybox from \"@fancyapps/fancybox\";\n\n// Initialize Fancybox\n$.fancybox.defaults.loop = true;\n$.fancybox.defaults.buttons = [\n \"zoom\",\n // 'share',\n \"slideShow\",\n \"fullScreen\",\n // 'download',\n \"thumbs\",\n \"close\",\n];\n$.fancybox.defaults.protect = true;\n$.fancybox.defaults.transitionEffect = \"slide\";\n$.fancybox.defaults.lang = \"nl\";\n$.fancybox.defaults.i18n = {\n nl: {\n CLOSE: \"Sluiten\",\n NEXT: \"Volgende\",\n PREV: \"Vorige\",\n ERROR: \"De aangevraagde inhoud kan niet worden geladen.
Probeer het later opnieuw.\",\n PLAY_START: \"Start slideshow\",\n PLAY_STOP: \"Pauzeer slideshow\",\n FULL_SCREEN: \"Volledig scherm\",\n THUMBS: \"Thumbnails\",\n DOWNLOAD: \"Download\",\n SHARE: \"Delen\",\n ZOOM: \"Zoomen\",\n },\n};\n","module.exports = jQuery;"],"sourceRoot":""}