{"version":3,"file":"jquery.fancybox.min.js","sources":["jquery.fancybox.js"],"sourcesContent":["// ==================================================\n// fancyBox v3.5.7\n//\n// Licensed GPLv3 for open source use\n// or fancyBox Commercial License for commercial use\n//\n// http://fancyapps.com/fancybox/\n// Copyright 2019 fancyApps\n//\n// ==================================================\n(function (window, document, $, undefined) {\r\n \"use strict\";\r\n\r\n window.console = window.console || {\r\n info: function (stuff) {}\r\n };\r\n\r\n // If there's no jQuery, fancyBox can't work\r\n // =========================================\r\n\r\n if (!$) {\r\n return;\r\n }\r\n\r\n // Check if fancyBox is already initialized\r\n // ========================================\r\n\r\n if ($.fn.fancybox) {\r\n console.info(\"fancyBox already initialized\");\r\n\r\n return;\r\n }\r\n\r\n // Private default settings\r\n // ========================\r\n\r\n var defaults = {\r\n // Close existing modals\r\n // Set this to false if you do not need to stack multiple instances\r\n closeExisting: false,\r\n\r\n // Enable infinite gallery navigation\r\n loop: false,\r\n\r\n // Horizontal space between slides\r\n gutter: 50,\r\n\r\n // Enable keyboard navigation\r\n keyboard: true,\r\n\r\n // Should allow caption to overlap the content\r\n preventCaptionOverlap: true,\r\n\r\n // Should display navigation arrows at the screen edges\r\n arrows: true,\r\n\r\n // Should display counter at the top left corner\r\n infobar: true,\r\n\r\n // Should display close button (using `btnTpl.smallBtn` template) over the content\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically enabled for \"html\", \"inline\" or \"ajax\" items\r\n smallBtn: \"auto\",\r\n\r\n // Should display toolbar (buttons at the top)\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically hidden if \"smallBtn\" is enabled\r\n toolbar: \"auto\",\r\n\r\n // What buttons should appear in the top right corner.\r\n // Buttons will be created using templates from `btnTpl` option\r\n // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\r\n buttons: [\r\n \"zoom\",\r\n //\"share\",\r\n \"slideShow\",\r\n //\"fullScreen\",\r\n //\"download\",\r\n \"thumbs\",\r\n \"close\"\r\n ],\r\n\r\n // Detect \"idle\" time in seconds\r\n idleTime: 3,\r\n\r\n // Disable right-click and use simple image protection for images\r\n protect: false,\r\n\r\n // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\r\n modal: false,\r\n\r\n image: {\r\n // Wait for images to load before displaying\r\n // true - wait for image to load and then display;\r\n // false - display thumbnail and load the full-sized image over top,\r\n // requires predefined image dimensions (`data-width` and `data-height` attributes)\r\n preload: false\r\n },\r\n\r\n ajax: {\r\n // Object containing settings for ajax request\r\n settings: {\r\n // This helps to indicate that request comes from the modal\r\n // Feel free to change naming\r\n data: {\r\n fancybox: true\r\n }\r\n }\r\n },\r\n\r\n iframe: {\r\n // Iframe template\r\n tpl: '',\r\n\r\n // Preload iframe before displaying it\r\n // This allows to calculate iframe content width and height\r\n // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\r\n preload: true,\r\n\r\n // Custom CSS styling for iframe wrapping element\r\n // You can use this to set custom iframe dimensions\r\n css: {},\r\n\r\n // Iframe tag attributes\r\n attr: {\r\n scrolling: \"auto\"\r\n }\r\n },\r\n\r\n // For HTML5 video only\r\n video: {\r\n tpl: '\",\r\n format: \"\", // custom video format\r\n autoStart: true\r\n },\r\n\r\n // Default content type if cannot be detected automatically\r\n defaultType: \"image\",\r\n\r\n // Open/close animation type\r\n // Possible values:\r\n // false - disable\r\n // \"zoom\" - zoom images from/to thumbnail\r\n // \"fade\"\r\n // \"zoom-in-out\"\r\n //\r\n animationEffect: \"zoom\",\r\n\r\n // Duration in ms for open/close animation\r\n animationDuration: 366,\r\n\r\n // Should image change opacity while zooming\r\n // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\r\n zoomOpacity: \"auto\",\r\n\r\n // Transition effect between slides\r\n //\r\n // Possible values:\r\n // false - disable\r\n // \"fade'\r\n // \"slide'\r\n // \"circular'\r\n // \"tube'\r\n // \"zoom-in-out'\r\n // \"rotate'\r\n //\r\n transitionEffect: \"fade\",\r\n\r\n // Duration in ms for transition animation\r\n transitionDuration: 366,\r\n\r\n // Custom CSS class for slide element\r\n slideClass: \"\",\r\n\r\n // Custom CSS class for layout\r\n baseClass: \"\",\r\n\r\n // Base template for layout\r\n baseTpl: '
' +\r\n '
' +\r\n '
' +\r\n '
 / 
' +\r\n '
{{buttons}}
' +\r\n '
{{arrows}}
' +\r\n '
' +\r\n '
' +\r\n \"
\" +\r\n \"
\",\r\n\r\n // Loading indicator template\r\n spinnerTpl: '
',\r\n\r\n // Error message template\r\n errorTpl: '

{{ERROR}}

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

Hi!

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

{{SHARE}}

\" +\r\n \"

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

\" +\r\n '

' +\r\n \"
\"\r\n }\r\n });\r\n\r\n function escapeHtml(string) {\r\n var entityMap = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': \""\",\r\n \"'\": \"'\",\r\n \"/\": \"/\",\r\n \"`\": \"`\",\r\n \"=\": \"=\"\r\n };\r\n\r\n return String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n return entityMap[s];\r\n });\r\n }\r\n\r\n $(document).on(\"click\", \"[data-fancybox-share]\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n current = instance.current || null,\r\n url,\r\n tpl;\r\n\r\n if (!current) {\r\n return;\r\n }\r\n\r\n if ($.type(current.opts.share.url) === \"function\") {\r\n url = current.opts.share.url.apply(current, [instance, current]);\r\n }\r\n\r\n tpl = current.opts.share.tpl\r\n .replace(/\\{\\{media\\}\\}/g, current.type === \"image\" ? encodeURIComponent(current.src) : \"\")\r\n .replace(/\\{\\{url\\}\\}/g, encodeURIComponent(url))\r\n .replace(/\\{\\{url_raw\\}\\}/g, escapeHtml(url))\r\n .replace(/\\{\\{descr\\}\\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : \"\");\r\n\r\n $.fancybox.open({\r\n src: instance.translate(instance, tpl),\r\n type: \"html\",\r\n opts: {\r\n touch: false,\r\n animationEffect: false,\r\n afterLoad: function (shareInstance, shareCurrent) {\r\n // Close self if parent instance is closing\r\n instance.$refs.container.one(\"beforeClose.fb\", function () {\r\n shareInstance.close(null, 0);\r\n });\r\n\r\n // Opening links in a popup window\r\n shareCurrent.$content.find(\".fancybox-share__button\").click(function () {\r\n window.open(this.href, \"Share\", \"width=550, height=450\");\r\n return false;\r\n });\r\n },\r\n mobile: {\r\n autoFocus: false\r\n }\r\n }\r\n });\r\n });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n // Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n if (!$.escapeSelector) {\r\n $.escapeSelector = function (sel) {\r\n var rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n var fcssescape = function (ch, asCodePoint) {\r\n if (asCodePoint) {\r\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n if (ch === \"\\0\") {\r\n return \"\\uFFFD\";\r\n }\r\n\r\n // Control characters and (dependent upon position) numbers get escaped as code points\r\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\r\n }\r\n\r\n // Other potentially-special ASCII characters get backslash-escaped\r\n return \"\\\\\" + ch;\r\n };\r\n\r\n return (sel + \"\").replace(rcssescape, fcssescape);\r\n };\r\n }\r\n\r\n // Get info about gallery name and current index from url\r\n function parseUrl() {\r\n var hash = window.location.hash.substr(1),\r\n rez = hash.split(\"-\"),\r\n index = rez.length > 1 && /^\\+?\\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,\r\n gallery = rez.join(\"-\");\r\n\r\n return {\r\n hash: hash,\r\n /* Index is starting from 1 */\r\n index: index < 1 ? 1 : index,\r\n gallery: gallery\r\n };\r\n }\r\n\r\n // Trigger click evnt on links to open new fancyBox instance\r\n function triggerFromUrl(url) {\r\n if (url.gallery !== \"\") {\r\n // If we can find element matching 'data-fancybox' atribute,\r\n // then triggering click event should start fancyBox\r\n $(\"[data-fancybox='\" + $.escapeSelector(url.gallery) + \"']\")\r\n .eq(url.index - 1)\r\n .focus()\r\n .trigger(\"click.fb-start\");\r\n }\r\n }\r\n\r\n // Get gallery name from current instance\r\n function getGalleryID(instance) {\r\n var opts, ret;\r\n\r\n if (!instance) {\r\n return false;\r\n }\r\n\r\n opts = instance.current ? instance.current.opts : instance.opts;\r\n ret = opts.hash || (opts.$orig ? opts.$orig.data(\"fancybox\") || opts.$orig.data(\"fancybox-trigger\") : \"\");\r\n\r\n return ret === \"\" ? false : ret;\r\n }\r\n\r\n // Start when DOM becomes ready\r\n $(function () {\r\n // Check if user has disabled this module\r\n if ($.fancybox.defaults.hash === false) {\r\n return;\r\n }\r\n\r\n // Update hash when opening/closing fancyBox\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var url, gallery;\r\n\r\n if (instance.group[instance.currIndex].opts.hash === false) {\r\n return;\r\n }\r\n\r\n url = parseUrl();\r\n gallery = getGalleryID(instance);\r\n\r\n // Make sure gallery start index matches index from hash\r\n if (gallery && url.gallery && gallery == url.gallery) {\r\n instance.currIndex = url.index - 1;\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var gallery;\r\n\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n // Check if need to update window hash\r\n gallery = getGalleryID(instance);\r\n\r\n if (!gallery) {\r\n return;\r\n }\r\n\r\n // Variable containing last hash value set by fancyBox\r\n // It will be used to determine if fancyBox needs to close after hash change is detected\r\n instance.currentHash = gallery + (instance.group.length > 1 ? \"-\" + (current.index + 1) : \"\");\r\n\r\n // If current hash is the same (this instance most likely is opened by hashchange), then do nothing\r\n if (window.location.hash === \"#\" + instance.currentHash) {\r\n return;\r\n }\r\n\r\n if (firstRun && !instance.origHash) {\r\n instance.origHash = window.location.hash;\r\n }\r\n\r\n if (instance.hashTimer) {\r\n clearTimeout(instance.hashTimer);\r\n }\r\n\r\n // Update hash\r\n instance.hashTimer = setTimeout(function () {\r\n if (\"replaceState\" in window.history) {\r\n window.history[firstRun ? \"pushState\" : \"replaceState\"]({},\r\n document.title,\r\n window.location.pathname + window.location.search + \"#\" + instance.currentHash\r\n );\r\n\r\n if (firstRun) {\r\n instance.hasCreatedHistory = true;\r\n }\r\n } else {\r\n window.location.hash = instance.currentHash;\r\n }\r\n\r\n instance.hashTimer = null;\r\n }, 300);\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance, current) {\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n clearTimeout(instance.hashTimer);\r\n\r\n // Goto previous history entry\r\n if (instance.currentHash && instance.hasCreatedHistory) {\r\n window.history.back();\r\n } else if (instance.currentHash) {\r\n if (\"replaceState\" in window.history) {\r\n window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || \"\"));\r\n } else {\r\n window.location.hash = instance.origHash;\r\n }\r\n }\r\n\r\n instance.currentHash = null;\r\n }\r\n });\r\n\r\n // Check if need to start/close after url has changed\r\n $(window).on(\"hashchange.fb\", function () {\r\n var url = parseUrl(),\r\n fb = null;\r\n\r\n // Find last fancyBox instance that has \"hash\"\r\n $.each(\r\n $(\".fancybox-container\")\r\n .get()\r\n .reverse(),\r\n function (index, value) {\r\n var tmp = $(value).data(\"FancyBox\");\r\n\r\n if (tmp && tmp.currentHash) {\r\n fb = tmp;\r\n return false;\r\n }\r\n }\r\n );\r\n\r\n if (fb) {\r\n // Now, compare hash values\r\n if (fb.currentHash !== url.gallery + \"-\" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {\r\n fb.currentHash = null;\r\n\r\n fb.close();\r\n }\r\n } else if (url.gallery !== \"\") {\r\n triggerFromUrl(url);\r\n }\r\n });\r\n\r\n // Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n setTimeout(function () {\r\n if (!$.fancybox.getInstance()) {\r\n triggerFromUrl(parseUrl());\r\n }\r\n }, 50);\r\n });\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// Wheel\r\n// Basic mouse weheel support for gallery navigation\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var prevTime = new Date().getTime();\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance, current) {\r\n instance.$refs.stage.on(\"mousewheel DOMMouseScroll wheel MozMousePixelScroll\", function (e) {\r\n var current = instance.current,\r\n currTime = new Date().getTime();\r\n\r\n if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === \"auto\" && current.type !== \"image\")) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (current.$slide.hasClass(\"fancybox-animated\")) {\r\n return;\r\n }\r\n\r\n e = e.originalEvent || e;\r\n\r\n if (currTime - prevTime < 250) {\r\n return;\r\n }\r\n\r\n prevTime = currTime;\r\n\r\n instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? \"next\" : \"previous\"]();\r\n });\r\n }\r\n });\r\n})(document, jQuery);"],"names":["window","document","$","undefined","$W","$D","called","requestAFrame","cancelAFrame","transitionEnd","forceRedraw","mergeOpts","FancyBox","div","buttonStr","focusStr","$pressed","_run","e","opts","$target","value","instance","items","index","isDefaultPrevented","preventDefault","data","options","currentTarget","trigger","fancybox","getInstance","$trigger","is","selector","attr","length","filter","open","console","info","stuff","fn","defaults","closeExisting","loop","gutter","keyboard","preventCaptionOverlap","arrows","infobar","smallBtn","toolbar","buttons","idleTime","protect","modal","image","preload","ajax","settings","iframe","tpl","css","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","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","callback","setTimeout","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","id","clearTimeout","t","el","createElement","transitions","transition","OTransition","MozTransition","WebkitTransition","style","$el","offsetHeight","opts1","opts2","rez","extend","each","key","isArray","content","self","this","isPlainObject","isMobile","currIndex","parseInt","prevIndex","prevPos","currPos","firstRun","group","slides","addContent","init","prototype","$container","firstItemOpts","addClass","body","scrollHeight","innerHeight","append","innerWidth","documentElement","clientWidth","translate","replace","appendTo","$refs","container","forEach","item","find","activate","jumpTo","obj","str","arr","match","n","makeArray","i","srcParts","$item","$orig","src","found","contentType","charAt","inArray","$thumb","thumb","caption","apply","split","shift","push","Object","keys","updateControls","Thumbs","isActive","create","focus","addEvents","removeEvents","on","stopPropagation","previous","next","isScaledDown","originalEvent","requestId","update","stage","hide","show","keycode","keyCode","which","ctrlKey","altKey","shiftKey","target","idleSecondsCounter","isIdle","showControls","idleInterval","setInterval","isDragging","hideControls","off","clearInterval","duration","pos","slidePos","stagePos","prop","diff","groupLen","isClosing","isAnimating","createSlide","forcedDuration","isNumeric","isMoved","$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","scaleY","$content","canvasWidth","canvasHeight","height","newImgWidth","newImgHeight","hasError","scaleX","updateCursor","SlideShow","scaleToFit","end","getFitPos","maxWidth","maxHeight","parseFloat","minRatio","Math","min","floor","aspectRatio","ratio","adjustCaption","adjustLayout","add","navigation","toggleClass","get","clientHeight","centerSlide","siblings","parent","children","hasClass","abs","nextWidth","nextHeight","Guestures","isZoomable","canPan","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","max-width","ceil","outerWidth","outerHeight","unbind","empty","isRevealed","hasOwnProperty","parents","$placeholder","insertAfter","html","after","$smallBtn","wrap","first","wrapInner","$spinner","fadeIn","button","preventOverlap","$caption","captionH","$clone","clone","eq","marginBottom","inlinePadding","actualPadding","disableLayoutFix","effect","effectClassName","start","getThumbPos","brw","bbw","elem","ownerDocument","elemCenter","getBoundingClientRect","offsetWidth","elementFromPoint","thumbPos","btw","blw","Document","exitFullscreen","webkitExitFullscreen","scrollTop","scrollLeft","prev","focusableStr","focusableItems","focusedItemIndex","activeElement","isVisible","d","done","cleanUp","domRect","$focus","scrollX","scrollY","name","args","Array","slice","call","arguments","unshift","hasHiddenControls","andCaption","toggleControls","version","command","all","destroy","test","navigator","userAgent","use3d","getComputedStyle","getPropertyValue","documentMode","props","position","to","leaveAnimationName","from","propertyName","callCallback","jQuery","params","param","indexOf","youtube","matcher","autoplay","autohide","fs","rel","hd","wmode","enablejsapi","html5","paramPlace","vimeo","show_title","show_byline","show_portrait","fullscreen","instagram","gmap_place","gmap_search","VideoAPILoader","urlParams","paramObj","provider","providerName","providerOpts","m","p","decodeURIComponent","p1","s","origSrc","contentSource","class","loading","loaded","load","vendor","script","_this","onYouTubeIframeAPIReady","appendChild","YT","Player","events","onStateChange","Vimeo","afterShow.fb","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","ontouchend","newPoints","onSwipe","onPan","onZoom","angle","swiping","atan2","PI","transition-duration","sliderLastPos","limitMovement","currentOffsetX","currentOffsetY","currentWidth","currentHeight","newOffsetX","newOffsetY","minTranslateX","minTranslateY","maxTranslateX","maxTranslateY","limitPosition","newWidth","newHeight","pinchRatio","translateFromZoomingX","translateFromZoomingY","centerPointEndX","centerPointEndY","translateFromTranslatingX","newPos","panning","zooming","endPoints","dMs","onTap","velocityX","velocityY","endPanning","endZooming","endSwiping","len","canAdvance","process","prefix","action","tapX","tapY","where","addBack","progress","timer","$button","toggle","$progress","inner","set","force","clear","removeAttr","onInit.fb","beforeShow.fb","afterKeydown.fb","keypress","beforeClose.fb onDeactivate.fb","hidden","FullScreen","fnMap","val","request","requestFullscreen","ALLOW_KEYBOARD_INPUT","exit","isFullscreen","Boolean","fullscreenElement","enabled","fullscreenEnabled","fullscreenchange","beforeClose.fb","FancyThumbs","CLASS","CLASS_ACTIVE","$grid","$list","list","innerHTML","that","share","currentHash","location","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"],"mappings":"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"}