{"version":3,"file":"/pc/all/libs/lightbox/lightbox.js.map","sources":["/pc/all/libs/lightbox/lightbox.js"],"sourcesContent":["/* global define */\n//https://formstone.it/components/lightbox/\n(function(factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\n \"jquery\",\n \"./core\",\n \"./touch\",\n \"./transition\",\n \"./viewer\"\n ], factory);\n } else {\n factory(jQuery, Formstone);\n }\n }(function($, Formstone) {\n\n \"use strict\";\n\n /**\n * @method private\n * @name setup\n * @description Setup plugin.\n */\n\n function setup() {\n $Body = Formstone.$body;\n $Locks = $(\"html, body\");\n\n OnLoad = Formstone.window.location.hash.replace(\"#\", \"\");\n }\n\n /**\n * @method private\n * @name resize\n * @description Handles window resize\n */\n\n function resize() {\n if (Instance) {\n resizeLightbox();\n }\n }\n\n /**\n * @method private\n * @name construct\n * @description Builds instance.\n * @param data [object] \"Instance data\"\n */\n\n function construct(data) {\n this.on(Events.click, data, buildLightbox);\n\n var gallery = this.data(Namespace + \"-gallery\");\n\n if (!OnLoaded && OnLoad && gallery === OnLoad) {\n OnLoaded = true;\n\n this.trigger(Events.click);\n }\n }\n\n /**\n * @method private\n * @name destruct\n * @description Tears down instance.\n * @param data [object] \"Instance data\"\n */\n\n function destruct(data) {\n closeLightbox();\n\n this.off(Events.namespace);\n }\n\n /**\n * @method private\n * @name initialize\n * @description Builds instance from $target.\n * @param $target [jQuery] \"Target jQuery object\"\n */\n\n function initialize($target, options) {\n if ($target instanceof $) {\n\n // Emulate event\n\n buildLightbox.apply(Window, [{\n data: $.extend(true, {}, {\n $object: $target\n }, Defaults, options || {})\n }]);\n }\n }\n\n /**\n * @method private\n * @name buildLightbox\n * @description Builds new lightbox.\n * @param e [object] \"Event data\"\n */\n\n function buildLightbox(e) {\n if (!Instance) {\n var data = e.data;\n\n if (data.overlay === true) {\n data.mobile = true; // Backwards compatibility\n }\n\n // Cache internal data\n Instance = $.extend({}, {\n visible: false,\n gallery: {\n active: false\n },\n isMobile: (Formstone.isMobile || data.mobile),\n isTouch: Formstone.support.touch,\n isAnimating: true,\n isZooming: false,\n oldContentHeight: 0,\n oldContentWidth: 0,\n metaHeight: 0,\n thumbnailHeight: 0,\n captionOpen: false,\n thumbnailsOpen: false,\n tapTimer: null\n }, data);\n\n Instance.isViewer = (Instance.isMobile && data.viewer && typeof $.fn.fsViewer !== \"undefined\");\n\n // Check target type\n var $el = data.$el,\n $object = data.$object,\n source = ($el && $el[0].href) ? $el[0].href || \"\" : \"\",\n hash = ($el && $el[0].hash) ? $el[0].hash || \"\" : \"\",\n sourceParts = source.toLowerCase().split(\".\").pop().split(/\\#|\\?/),\n type = ($el) ? $el.data(Namespace + \"-type\") : \"\",\n isImage = ((type === \"image\") || (source.match(data.fileTypes) || source.substr(0, 10) === \"data:image\")),\n isVideo = checkVideo(source),\n isUrl = ((type === \"url\") || (!isImage && !isVideo && source.substr(0, 4) === \"http\" && !hash)),\n isElement = ((type === \"element\") || (!isImage && !isVideo && !isUrl && (hash.substr(0, 1) === \"#\"))),\n isObject = ((typeof $object !== \"undefined\"));\n\n if (isElement) {\n source = hash;\n }\n\n // Retain default click\n if (!(isImage || isVideo || isUrl || isElement || isObject)) {\n Instance = null;\n\n return;\n }\n\n // Kill event\n Functions.killEvent(e);\n\n // Double the margin\n Instance.margin *= 2;\n\n if (isImage) {\n Instance.type = \"image\";\n } else if (isVideo) {\n Instance.type = \"video\";\n } else {\n Instance.type = \"element\";\n }\n\n if (isImage || isVideo) {\n // Check for gallery\n var id = $el.data(Namespace + \"-gallery\");\n\n if (id) {\n Instance.gallery.active = true;\n Instance.gallery.id = id;\n Instance.gallery.$items = $(\"a[data-lightbox-gallery= \" + Instance.gallery.id + \"], a[rel= \" + Instance.gallery.id + \"]\"); // backwards compatibility\n Instance.gallery.index = Instance.gallery.$items.index(Instance.$el);\n Instance.gallery.total = Instance.gallery.$items.length - 1;\n }\n }\n\n // Thumbnails support\n if (!(Instance.thumbnails && (isImage || isVideo) && Instance.gallery.active)) {\n Instance.thumbnails = false;\n }\n\n // Assemble HTML\n var html = '';\n if (!Instance.isMobile) {\n html += '
';\n }\n var lightboxClasses = [\n RawClasses.base,\n RawClasses.loading,\n RawClasses.animating,\n Instance.theme,\n Instance.customClass\n ];\n\n if (Instance.fixed) {\n lightboxClasses.push(RawClasses.fixed);\n }\n if (Instance.isMobile) {\n lightboxClasses.push(RawClasses.mobile);\n }\n if (Instance.isTouch) {\n lightboxClasses.push(RawClasses.touch);\n }\n if (isUrl) {\n lightboxClasses.push(RawClasses.iframed);\n }\n if (isElement || isObject) {\n lightboxClasses.push(RawClasses.inline);\n }\n if (Instance.thumbnails) {\n lightboxClasses.push(RawClasses.thumbnailed);\n }\n\n Instance.labels.lightbox = Instance.labels.lightbox.replace('{guid}', data.numGuid);\n\n html += '
';\n html += '';\n html += '';\n html += '
';\n\n // Thumbnails\n if (Instance.gallery.active && Instance.thumbnails) {\n html += '
';\n html += '
';\n\n var $item,\n thumb;\n\n for (var i = 0, count = Instance.gallery.$items.length; i < count; i++) {\n $item = Instance.gallery.$items.eq(i);\n thumb = $item.data(\"lightbox-thumbnail\");\n\n if (!thumb) {\n thumb = $item.find(\"img\").attr(\"src\");\n }\n\n html += '';\n }\n\n html += '
';\n }\n\n html += '
';\n\n if (isImage || isVideo) {\n\n html += '
';\n\n html += '
';\n if (Instance.gallery.active) {\n html += '';\n html += '';\n }\n if (Instance.isMobile && Instance.isTouch) {\n html += '';\n\n if (Instance.gallery.active && Instance.thumbnails) {\n html += '';\n }\n }\n html += '
'; // controls\n\n html += '
';\n html += '
';\n if (Instance.gallery.active) {\n html += '

' + (Instance.gallery.index + 1) + ' ';\n html += Instance.labels.count;\n html += ' ' + (Instance.gallery.total + 1) + '';\n html += '

';\n }\n html += '
';\n html += Instance.formatter.call($el, data);\n html += '
'; // caption, meta_content, meta\n\n html += '
'; // tools\n }\n html += '
'; //container, content, lightbox\n\n // Modify Dom\n $Body.append(html);\n\n // Cache jquery objects\n Instance.$overlay = $(Classes.overlay);\n Instance.$lightbox = $(Classes.base);\n Instance.$close = $(Classes.close);\n Instance.$container = $(Classes.container);\n Instance.$content = $(Classes.content);\n Instance.$tools = $(Classes.tools);\n Instance.$meta = $(Classes.meta);\n Instance.$metaContent = $(Classes.meta_content);\n Instance.$position = $(Classes.position);\n Instance.$caption = $(Classes.caption);\n Instance.$controlBox = $(Classes.controls);\n Instance.$controls = $(Classes.control);\n Instance.$thumbnails = $(Classes.thumbnails);\n Instance.$thumbnailContainer = $(Classes.thumbnail_container);\n Instance.$thumbnailItems = $(Classes.thumbnail_item);\n\n if (Instance.isMobile) {\n Instance.paddingVertical = Instance.$close.outerHeight();\n Instance.paddingHorizontal = 0;\n\n Instance.mobilePaddingVertical = parseInt(Instance.$content.css(\"paddingTop\"), 10) + parseInt(Instance.$content.css(\"paddingBottom\"), 10);\n Instance.mobilePaddingHorizontal = parseInt(Instance.$content.css(\"paddingLeft\"), 10) + parseInt(Instance.$content.css(\"paddingRight\"), 10);\n } else {\n Instance.paddingVertical = parseInt(Instance.$lightbox.css(\"paddingTop\"), 10) + parseInt(Instance.$lightbox.css(\"paddingBottom\"), 10);\n Instance.paddingHorizontal = parseInt(Instance.$lightbox.css(\"paddingLeft\"), 10) + parseInt(Instance.$lightbox.css(\"paddingRight\"), 10);\n\n Instance.mobilePaddingVertical = 0;\n Instance.mobilePaddingHorizontal = 0;\n }\n\n Instance.contentHeight = Instance.$lightbox.outerHeight() - Instance.paddingVertical;\n Instance.contentWidth = Instance.$lightbox.outerWidth() - Instance.paddingHorizontal;\n Instance.controlHeight = Instance.$controls.outerHeight();\n\n // Center\n centerLightbox();\n\n // Update gallery\n if (Instance.gallery.active) {\n Instance.$lightbox.addClass(RawClasses.has_controls);\n updateGalleryControls();\n }\n\n // Bind events\n $Window.on(Events.keyDown, onKeyDown);\n $Body.on(Events.click, [Classes.overlay, Classes.close].join(\", \"), closeLightbox)\n .on([Events.focus, Events.focusIn].join(\" \"), onDocumentFocus);\n\n if (Instance.gallery.active) {\n Instance.$lightbox.on(Events.click, Classes.control, advanceGallery);\n }\n\n if (Instance.thumbnails) {\n Instance.$lightbox.on(Events.click, Classes.thumbnail_item, jumpGallery);\n }\n\n if (Instance.isMobile && Instance.isTouch) {\n Instance.$lightbox.on(Events.click, Classes.caption_toggle, toggleCaption)\n .on(Events.click, Classes.thumbnail_toggle, toggleThumbnails);\n }\n\n Instance.$lightbox.fsTransition({\n property: \"opacity\"\n },\n function() {\n if (isImage) {\n loadImage(source);\n } else if (isVideo) {\n loadVideo(source);\n } else if (isUrl) {\n loadURL(source);\n } else if (isElement) {\n appendContents(source);\n } else if (isObject) {\n appendObject(Instance.$object);\n }\n }).addClass(RawClasses.open);\n\n Instance.$overlay.addClass(RawClasses.open);\n }\n }\n\n /**\n * @method\n * @name resize\n * @description Resizes lightbox.\n * @example $.lightbox(\"resize\");\n * @param height [int | false] \"Target height or false to auto size\"\n * @param width [int | false] \"Target width or false to auto size\"\n */\n\n /**\n * @method private\n * @name resizeLightbox\n * @description Triggers resize of instance.\n */\n\n function resizeLightbox(e) {\n if (typeof e !== \"object\") {\n Instance.targetHeight = arguments[0];\n Instance.targetWidth = arguments[1];\n }\n\n if (Instance.type === \"element\") {\n sizeContent(Instance.$content.find(\"> :first-child\"));\n } else if (Instance.type === \"image\") {\n sizeImage();\n } else if (Instance.type === \"video\") {\n sizeVideo();\n }\n\n sizeLightbox();\n }\n\n /**\n * @method\n * @name close\n * @description Closes active instance.\n * @example $.lightbox(\"close\");\n */\n\n /**\n * @method private\n * @name closeLightbox\n * @description Closes active instance.\n * @param e [object] \"Event data\"\n */\n\n function closeLightbox(e) {\n Functions.killEvent(e);\n\n if (Instance) {\n Instance.$lightbox.fsTransition(\"destroy\");\n Instance.$content.fsTransition(\"destroy\");\n\n Instance.$lightbox.addClass(RawClasses.animating).fsTransition({\n property: \"opacity\"\n },\n function(e) {\n // Clean up\n if (typeof Instance.$inlineTarget !== 'undefined' && Instance.$inlineTarget.length) {\n restoreContents();\n }\n\n if (Instance.isViewer && Instance.$imageContainer && Instance.$imageContainer.length) {\n Instance.$imageContainer.fsViewer(\"destroy\");\n }\n\n Instance.$lightbox.off(Events.namespace);\n Instance.$container.off(Events.namespace);\n $Window.off(Events.keyDown);\n $Body.off(Events.namespace);\n $Body.off(Events.namespace);\n\n Instance.$overlay.remove();\n Instance.$lightbox.remove();\n\n if (typeof Instance.$el !== \"undefined\" && Instance.$el && Instance.$el.length) {\n Instance.$el.focus();\n }\n\n // Reset Instance\n Instance = null;\n\n $Window.trigger(Events.close);\n });\n\n Instance.$lightbox.removeClass(RawClasses.open);\n Instance.$overlay.removeClass(RawClasses.open);\n\n if (Instance.isMobile) {\n $Locks.removeClass(RawClasses.lock);\n\n Functions.unlockViewport(Namespace);\n }\n }\n }\n\n /**\n * @method private\n * @name openLightbox\n * @description Opens active instance.\n */\n\n function openLightbox() {\n var position = calculatePosition(),\n durration = Instance.isMobile ? 0 : Instance.duration;\n\n if (Instance.isMobile) {\n Functions.lockViewport(Namespace);\n } else {\n Instance.$controls.css({\n marginTop: ((Instance.contentHeight - Instance.controlHeight - Instance.metaHeight + Instance.thumbnailHeight) / 2)\n });\n }\n\n if (Instance.$caption.html() === \"\") {\n Instance.$caption.hide();\n Instance.$lightbox.removeClass(RawClasses.has_caption);\n\n if (!Instance.gallery.active) {\n Instance.$tools.hide();\n }\n } else {\n Instance.$caption.show();\n Instance.$lightbox.addClass(RawClasses.has_caption);\n }\n\n Instance.$lightbox.fsTransition({\n property: (Instance.contentHeight !== Instance.oldContentHeight) ? \"height\" : \"width\"\n },\n function() {\n Instance.$content.fsTransition({\n property: \"opacity\"\n },\n function() {\n Instance.$lightbox.removeClass(RawClasses.animating);\n Instance.isAnimating = false;\n });\n\n Instance.$lightbox.removeClass(RawClasses.loading)\n .addClass(RawClasses.ready);\n\n Instance.visible = true;\n\n // Fire open event\n $Window.trigger(Events.open);\n\n // Start preloading\n if (Instance.gallery.active) {\n preloadGallery();\n updateThumbnails();\n positionThumbnails();\n }\n\n // Focus\n Instance.$lightbox.focus();\n });\n\n if (!Instance.isMobile) {\n Instance.$lightbox.css({\n height: Instance.contentHeight + Instance.paddingVertical,\n width: Instance.contentWidth + Instance.paddingHorizontal,\n top: (!Instance.fixed) ? position.top : 0\n });\n }\n\n // Trigger event in case the content size hasn't changed\n var contentHasChanged = (Instance.oldContentHeight !== Instance.contentHeight || Instance.oldContentWidth !== Instance.contentWidth);\n\n if (Instance.isMobile || !contentHasChanged) {\n Instance.$lightbox.fsTransition(\"resolve\");\n }\n\n // Track content size changes\n Instance.oldContentHeight = Instance.contentHeight;\n Instance.oldContentWidth = Instance.contentWidth;\n\n if (Instance.isMobile) {\n $Locks.addClass(RawClasses.lock);\n }\n }\n\n /**\n * @method private\n * @name sizeLightbox\n * @description Sizes active instance.\n */\n\n function sizeLightbox() {\n if (Instance.visible && !Instance.isMobile) {\n var position = calculatePosition();\n\n Instance.$controls.css({\n marginTop: ((Instance.contentHeight - Instance.controlHeight - Instance.metaHeight + Instance.thumbnailHeight) / 2)\n });\n\n Instance.$lightbox.css({\n height: Instance.contentHeight + Instance.paddingVertical,\n width: Instance.contentWidth + Instance.paddingHorizontal,\n top: (!Instance.fixed) ? position.top : 0\n });\n\n Instance.oldContentHeight = Instance.contentHeight;\n Instance.oldContentWidth = Instance.contentWidth;\n }\n }\n\n /**\n * @method private\n * @name centerLightbox\n * @description Centers instance.\n */\n\n function centerLightbox() {\n var position = calculatePosition();\n\n Instance.$lightbox.css({\n top: (!Instance.fixed) ? position.top : 0\n });\n }\n\n /**\n * @method private\n * @name calculatePosition\n * @description Calculates positions.\n * @return [object] \"Object containing top and left positions\"\n */\n\n function calculatePosition() {\n if (Instance.isMobile) {\n return {\n left: 0,\n top: 0\n };\n }\n\n var pos = {\n left: (Formstone.windowWidth - Instance.contentWidth - Instance.paddingHorizontal) / 2,\n top: (Instance.top <= 0) ? ((Formstone.windowHeight - Instance.contentHeight - Instance.paddingVertical) / 2) : Instance.top\n };\n\n if (Instance.fixed !== true) {\n pos.top += $Window.scrollTop();\n }\n\n return pos;\n }\n\n\n /**\n * @method private\n * @name toggleCaption\n * @description Toggle caption.\n */\n\n function toggleCaption(e) {\n Functions.killEvent(e);\n\n if (Instance.captionOpen) {\n closeCaption();\n } else {\n closeThumbnails();\n\n var height = parseInt(Instance.$metaContent.outerHeight(true));\n height += parseInt(Instance.$meta.css(\"padding-top\"));\n height += parseInt(Instance.$meta.css(\"padding-bottom\"));\n\n Instance.$meta.css({\n height: height\n });\n\n Instance.$lightbox.addClass(RawClasses.caption_open)\n .find(Classes.caption_toggle).text(Instance.labels.captionOpen);\n\n Instance.captionOpen = true;\n }\n }\n\n /**\n * @method private\n * @name closeCaption\n * @description Close caption.\n */\n\n function closeCaption() {\n Instance.$lightbox.removeClass(RawClasses.caption_open)\n .find(Classes.caption_toggle).text(Instance.labels.captionClosed);\n Instance.captionOpen = false;\n }\n\n /**\n * @method private\n * @name formatCaption\n * @description Formats caption.\n * @param $target [jQuery object] \"Target element\"\n */\n\n function formatCaption() {\n var title = this.attr(\"title\"),\n t = (title !== undefined && title) ? title.replace(/^\\s+|\\s+$/g, '') : false;\n\n return t ? '

' + t + '

' : \"\";\n }\n\n /**\n * @method private\n * @name toggleThumbnails\n * @description Toggle thumbnails.\n */\n\n function toggleThumbnails(e) {\n Functions.killEvent(e);\n\n if (Instance.thumbnailsOpen) {\n closeThumbnails();\n } else {\n closeCaption();\n\n Instance.$lightbox.addClass(RawClasses.thumbnails_open)\n .find(Classes.thumbnail_toggle).text(Instance.labels.thumbnailsOpen);\n\n Instance.thumbnailsOpen = true;\n }\n }\n\n /**\n * @method private\n * @name closeThumbnails\n * @description Close thumbnails.\n */\n\n function closeThumbnails() {\n Instance.$lightbox.removeClass(RawClasses.thumbnails_open)\n .find(Classes.thumbnail_toggle).text(Instance.labels.thumbnailsClosed);\n Instance.thumbnailsOpen = false;\n }\n\n /**\n * @method private\n * @name loadImage\n * @description Loads source image.\n * @param source [string] \"Source image URL\"\n */\n\n function loadImage(source) {\n if (Instance.isViewer) {\n Instance.$imageContainer = $('
');\n Instance.$image = Instance.$imageContainer.find(\"img\");\n\n Instance.$image.attr(\"src\", source)\n .addClass(RawClasses.image);\n\n Instance.$content.prepend(Instance.$imageContainer);\n\n sizeImage();\n\n Instance.$imageContainer.one(\"loaded.viewer\", function() {\n openLightbox();\n }).fsViewer({\n theme: Instance.theme\n });\n } else {\n // Cache current image\n Instance.$imageContainer = $('
');\n Instance.$image = Instance.$imageContainer.find(\"img\");\n\n Instance.$image.one(Events.load, function() {\n var naturalSize = calculateNaturalSize(Instance.$image);\n\n Instance.naturalHeight = naturalSize.naturalHeight;\n Instance.naturalWidth = naturalSize.naturalWidth;\n\n if (Instance.retina) {\n Instance.naturalHeight /= 2;\n Instance.naturalWidth /= 2;\n }\n\n Instance.$content.prepend(Instance.$imageContainer);\n\n // Size content to be sure it fits the viewport\n sizeImage();\n\n openLightbox();\n }).on(Events.error, loadError)\n .attr(\"src\", source)\n .addClass(RawClasses.image);\n\n // If image has already loaded into cache, trigger load event\n if (Instance.$image[0].complete || Instance.$image[0].readyState === 4) {\n Instance.$image.trigger(Events.load);\n }\n }\n }\n\n /**\n * @method private\n * @name sizeImage\n * @description Sizes image to fit in viewport.\n * @param count [int] \"Number of resize attempts\"\n */\n\n function sizeImage() {\n if (Instance.$image) {\n var count = 0;\n\n Instance.windowHeight = Instance.viewportHeight = Formstone.windowHeight - Instance.mobilePaddingVertical - Instance.paddingVertical;\n Instance.windowWidth = Instance.viewportWidth = Formstone.windowWidth - Instance.mobilePaddingHorizontal - Instance.paddingHorizontal;\n\n Instance.contentHeight = Infinity;\n Instance.contentWidth = Infinity;\n\n Instance.imageMarginTop = 0;\n Instance.imageMarginLeft = 0;\n\n while (Instance.contentHeight > Instance.viewportHeight && count < 2) {\n Instance.imageHeight = (count === 0) ? Instance.naturalHeight : Instance.$image.outerHeight();\n Instance.imageWidth = (count === 0) ? Instance.naturalWidth : Instance.$image.outerWidth();\n Instance.metaHeight = (count === 0) ? 0 : Instance.metaHeight;\n Instance.spacerHeight = (count === 0) ? 0 : Instance.spacerHeight;\n Instance.thumbnailHeight = (count === 0) ? 0 : Instance.thumbnailHeight;\n\n if (count === 0) {\n Instance.ratioHorizontal = Instance.imageHeight / Instance.imageWidth;\n Instance.ratioVertical = Instance.imageWidth / Instance.imageHeight;\n\n Instance.isWide = (Instance.imageWidth > Instance.imageHeight);\n }\n\n // Double check min and max\n if (Instance.imageHeight < Instance.minHeight) {\n Instance.minHeight = Instance.imageHeight;\n }\n if (Instance.imageWidth < Instance.minWidth) {\n Instance.minWidth = Instance.imageWidth;\n }\n\n if (Instance.isMobile) {\n if (Instance.isTouch) {\n Instance.$controlBox.css({\n width: Formstone.windowWidth\n });\n Instance.spacerHeight = Instance.$controls.outerHeight(true);\n } else {\n Instance.$tools.css({\n width: Formstone.windowWidth\n });\n Instance.spacerHeight = Instance.$tools.outerHeight(true);\n }\n\n // Content match viewport\n Instance.contentHeight = Instance.viewportHeight;\n Instance.contentWidth = Instance.viewportWidth;\n\n if (!Instance.isTouch) {\n Instance.$content.css({\n height: Instance.contentHeight - Instance.spacerHeight // - 10\n });\n }\n\n if (Instance.$thumbnails.length) {\n Instance.spacerHeight += Instance.$thumbnails.outerHeight(true);\n }\n Instance.spacerHeight += 10;\n\n fitImage();\n\n Instance.imageMarginTop = (Instance.contentHeight - Instance.targetImageHeight - Instance.spacerHeight) / 2;\n Instance.imageMarginLeft = (Instance.contentWidth - Instance.targetImageWidth) / 2;\n } else {\n // Viewport should match window, less margin, padding and meta\n if (count === 0) {\n Instance.viewportHeight -= (Instance.margin + Instance.paddingVertical);\n Instance.viewportWidth -= (Instance.margin + Instance.paddingHorizontal);\n }\n Instance.viewportHeight -= Instance.metaHeight;\n\n if (Instance.thumbnails) {\n Instance.viewportHeight -= Instance.thumbnailHeight;\n }\n\n fitImage();\n\n Instance.contentHeight = Instance.targetImageHeight;\n Instance.contentWidth = Instance.targetImageWidth;\n }\n\n // Modify DOM\n if (!Instance.isMobile && !Instance.isTouch) {\n Instance.$meta.css({\n width: Instance.contentWidth\n });\n }\n\n Instance.$image.css({\n height: Instance.targetImageHeight,\n width: Instance.targetImageWidth,\n marginTop: Instance.imageMarginTop,\n marginLeft: Instance.imageMarginLeft\n });\n\n if (!Instance.isMobile) {\n Instance.metaHeight = Instance.$meta.outerHeight(true);\n Instance.contentHeight += Instance.metaHeight;\n }\n\n if (Instance.thumbnails) {\n Instance.thumbnailHeight = Instance.$thumbnails.outerHeight(true);\n Instance.contentHeight += Instance.thumbnailHeight;\n }\n\n count++;\n }\n }\n }\n\n /**\n * @method private\n * @name fitImage\n * @description Calculates target image size.\n */\n\n function fitImage() {\n var height = (!Instance.isMobile) ? Instance.viewportHeight : Instance.contentHeight - Instance.spacerHeight,\n width = (!Instance.isMobile) ? Instance.viewportWidth : Instance.contentWidth;\n\n if (Instance.isWide) {\n // WIDE\n Instance.targetImageWidth = width;\n Instance.targetImageHeight = Instance.targetImageWidth * Instance.ratioHorizontal;\n\n if (Instance.targetImageHeight > height) {\n Instance.targetImageHeight = height;\n Instance.targetImageWidth = Instance.targetImageHeight * Instance.ratioVertical;\n }\n } else {\n // TALL\n Instance.targetImageHeight = height;\n Instance.targetImageWidth = Instance.targetImageHeight * Instance.ratioVertical;\n\n if (Instance.targetImageWidth > width) {\n Instance.targetImageWidth = width;\n Instance.targetImageHeight = Instance.targetImageWidth * Instance.ratioHorizontal;\n }\n }\n\n // MAX\n if (Instance.targetImageWidth > Instance.imageWidth || Instance.targetImageHeight > Instance.imageHeight) {\n Instance.targetImageHeight = Instance.imageHeight;\n Instance.targetImageWidth = Instance.imageWidth;\n }\n\n // MIN\n if (Instance.targetImageWidth < Instance.minWidth || Instance.targetImageHeight < Instance.minHeight) {\n if (Instance.targetImageWidth < Instance.minWidth) {\n Instance.targetImageWidth = Instance.minWidth;\n Instance.targetImageHeight = Instance.targetImageWidth * Instance.ratioHorizontal;\n } else {\n Instance.targetImageHeight = Instance.minHeight;\n Instance.targetImageWidth = Instance.targetImageHeight * Instance.ratioVertical;\n }\n }\n }\n\n /**\n * @method private\n * @name loadVideo\n * @description Loads source video.\n * @param source [string] \"Source video URL\"\n */\n\n function formatYouTube(parts) {\n return \"//www.youtube.com/embed/\" + parts[1];\n }\n\n function formatVimeo(parts) {\n return \"//player.vimeo.com/video/\" + parts[3];\n }\n\n function loadVideo(source) {\n var parts,\n url = checkVideo(source),\n queryString = source.split(\"?\");\n\n if (url) {\n // if we have a query string\n if (queryString.length >= 2) {\n url += \"?\" + queryString.slice(1)[0].trim();\n }\n\n Instance.$videoWrapper = $('
');\n Instance.$video = $('');\n\n Instance.$video.attr(\"src\", url)\n .addClass(RawClasses.video)\n .prependTo(Instance.$videoWrapper);\n\n Instance.$content.prepend(Instance.$videoWrapper);\n\n sizeVideo();\n openLightbox();\n } else {\n loadError();\n }\n }\n\n /**\n * @method private\n * @name sizeVideo\n * @description Sizes video to fit in viewport.\n */\n\n function sizeVideo() {\n // Set initial vars\n Instance.windowHeight = Instance.viewportHeight = Formstone.windowHeight - Instance.mobilePaddingVertical - Instance.paddingVertical;\n Instance.windowWidth = Instance.viewportWidth = Formstone.windowWidth - Instance.mobilePaddingHorizontal - Instance.paddingHorizontal;\n Instance.videoMarginTop = 0;\n Instance.videoMarginLeft = 0;\n\n if (Instance.isMobile) {\n if (Instance.isTouch) {\n Instance.$controlBox.css({\n width: Formstone.windowWidth\n });\n Instance.spacerHeight = Instance.$controls.outerHeight(true) + 10;\n } else {\n Instance.$tools.css({\n width: Formstone.windowWidth\n });\n Instance.spacerHeight = Instance.$tools.outerHeight(true);\n Instance.spacerHeight += Instance.$thumbnails.outerHeight(true) + 10;\n }\n\n Instance.viewportHeight -= Instance.spacerHeight;\n\n Instance.targetVideoWidth = Instance.viewportWidth;\n Instance.targetVideoHeight = Instance.targetVideoWidth * Instance.videoRatio;\n\n if (Instance.targetVideoHeight > Instance.viewportHeight) {\n Instance.targetVideoHeight = Instance.viewportHeight;\n Instance.targetVideoWidth = Instance.targetVideoHeight / Instance.videoRatio;\n }\n\n Instance.videoMarginTop = (Instance.viewportHeight - Instance.targetVideoHeight) / 2;\n Instance.videoMarginLeft = (Instance.viewportWidth - Instance.targetVideoWidth) / 2;\n } else {\n Instance.viewportHeight = Instance.windowHeight - Instance.margin;\n Instance.viewportWidth = Instance.windowWidth - Instance.margin;\n\n Instance.targetVideoWidth = (Instance.videoWidth > Instance.viewportWidth) ? Instance.viewportWidth : Instance.videoWidth;\n if (Instance.targetVideoWidth < Instance.minWidth) {\n Instance.targetVideoWidth = Instance.minWidth;\n }\n Instance.targetVideoHeight = Instance.targetVideoWidth * Instance.videoRatio;\n\n Instance.contentHeight = Instance.targetVideoHeight;\n Instance.contentWidth = Instance.targetVideoWidth;\n }\n\n // Update dom\n if (!Instance.isMobile && !Instance.isTouch) {\n Instance.$meta.css({\n width: Instance.contentWidth\n });\n }\n\n Instance.$videoWrapper.css({\n height: Instance.targetVideoHeight,\n width: Instance.targetVideoWidth,\n marginTop: Instance.videoMarginTop,\n marginLeft: Instance.videoMarginLeft\n });\n\n if (!Instance.isMobile) {\n Instance.metaHeight = Instance.$meta.outerHeight(true);\n Instance.contentHeight += Instance.metaHeight;\n }\n\n if (Instance.thumbnails) {\n Instance.thumbnailHeight = Instance.$thumbnails.outerHeight(true);\n Instance.contentHeight += Instance.thumbnailHeight;\n }\n }\n\n /**\n * @method private\n * @name preloadGallery\n * @description Preloads previous and next images in gallery for faster rendering.\n * @param e [object] \"Event Data\"\n */\n\n function preloadGallery(e) {\n var source = '';\n\n if (Instance.gallery.index > 0) {\n source = Instance.gallery.$items.eq(Instance.gallery.index - 1).attr(\"href\");\n if (!checkVideo(source)) {\n $('');\n }\n }\n if (Instance.gallery.index < Instance.gallery.total) {\n source = Instance.gallery.$items.eq(Instance.gallery.index + 1).attr(\"href\");\n if (!checkVideo(source)) {\n $('');\n }\n }\n }\n\n /**\n * @method private\n * @name advanceGallery\n * @description Advances gallery base on direction.\n * @param e [object] \"Event Data\"\n */\n\n function advanceGallery(e) {\n Functions.killEvent(e);\n\n var $control = $(e.currentTarget);\n\n if (!Instance.isAnimating && !$control.hasClass(RawClasses.control_disabled)) {\n Instance.isAnimating = true;\n\n closeCaption();\n\n Instance.gallery.index += ($control.hasClass(RawClasses.control_next)) ? 1 : -1;\n if (Instance.gallery.index > Instance.gallery.total) {\n Instance.gallery.index = (Instance.infinite) ? 0 : Instance.gallery.total;\n }\n if (Instance.gallery.index < 0) {\n Instance.gallery.index = (Instance.infinite) ? Instance.gallery.total : 0;\n }\n\n updateThumbnails();\n\n Instance.$lightbox.addClass(RawClasses.animating);\n\n Instance.$content.fsTransition({\n property: \"opacity\"\n }, cleanGallery);\n\n Instance.$lightbox.addClass(RawClasses.loading);\n }\n }\n\n /**\n * @method private\n * @name jumpGallery\n * @description Jumps gallery base on thumbnail click.\n * @param e [object] \"Event Data\"\n */\n\n function jumpGallery(e) {\n Functions.killEvent(e);\n\n var $thumbnail = $(e.currentTarget);\n\n if (!Instance.isAnimating && !$thumbnail.hasClass(RawClasses.active)) {\n Instance.isAnimating = true;\n\n closeCaption();\n\n Instance.gallery.index = Instance.$thumbnailItems.index($thumbnail);\n\n updateThumbnails();\n\n Instance.$lightbox.addClass(RawClasses.animating);\n\n Instance.$content.fsTransition({\n property: \"opacity\"\n }, cleanGallery);\n\n Instance.$lightbox.addClass(RawClasses.loading);\n }\n }\n\n /**\n * @method private\n * @name jumpGallery\n * @description\n */\n\n function updateThumbnails() {\n // Thumbnails\n if (Instance.thumbnails) {\n var $thumb = Instance.$thumbnailItems.eq(Instance.gallery.index);\n\n Instance.$thumbnailItems.removeClass(RawClasses.active);\n $thumb.addClass(RawClasses.active);\n }\n }\n\n /**\n * @method private\n * @name jumpGallery\n * @description\n */\n\n function positionThumbnails() {\n // Thumbnails\n if (Instance.thumbnails) {\n var $thumb = Instance.$thumbnailItems.eq(Instance.gallery.index),\n scrollLeft = $thumb.position().left + ($thumb.outerWidth(false) / 2) - (Instance.$thumbnailContainer.outerWidth(true) / 2);\n\n Instance.$thumbnailContainer.stop().animate({\n scrollLeft: scrollLeft\n }, 200, \"linear\");\n }\n }\n\n /**\n * @method private\n * @name cleanGallery\n * @description Cleans gallery.\n */\n\n function cleanGallery() {\n if (typeof Instance.$imageContainer !== 'undefined') {\n if (Instance.isViewer) {\n Instance.$imageContainer.fsViewer(\"destroy\");\n }\n Instance.$imageContainer.remove();\n }\n if (typeof Instance.$videoWrapper !== 'undefined') {\n Instance.$videoWrapper.remove();\n }\n Instance.$el = Instance.gallery.$items.eq(Instance.gallery.index);\n\n Instance.$caption.html(Instance.formatter.call(Instance.$el, Instance));\n Instance.$position.find(Classes.position_current).html(Instance.gallery.index + 1);\n\n var source = Instance.$el.attr(\"href\"),\n isVideo = checkVideo(source);\n\n if (isVideo) {\n Instance.type = \"video\";\n\n loadVideo(source);\n } else {\n Instance.type = \"image\";\n\n loadImage(source);\n }\n\n updateGalleryControls();\n }\n\n /**\n * @method private\n * @name updateGalleryControls\n * @description Updates gallery control states.\n */\n\n function updateGalleryControls() {\n Instance.$controls.removeClass(RawClasses.control_disabled);\n\n if (!Instance.infinite) {\n if (Instance.gallery.index === 0) {\n Instance.$controls.filter(Classes.control_previous).addClass(RawClasses.control_disabled);\n }\n if (Instance.gallery.index === Instance.gallery.total) {\n Instance.$controls.filter(Classes.control_next).addClass(RawClasses.control_disabled);\n }\n }\n }\n\n /**\n * @method private\n * @name onKeyDown\n * @description Handles keypress in gallery.\n * @param e [object] \"Event data\"\n */\n\n function onKeyDown(e) {\n if (Instance.gallery.active && (e.keyCode === 37 || e.keyCode === 39)) {\n Functions.killEvent(e);\n\n Instance.$controls.filter((e.keyCode === 37) ? Classes.control_previous : Classes.control_next).trigger(Events.click);\n } else if (e.keyCode === 27) {\n Instance.$close.trigger(Events.click);\n }\n }\n\n /**\n * @method private\n * @name appendContents\n * @description Moves target inline element.\n * @param id [string] \"Target element id\"\n */\n\n function appendContents(id) {\n Instance.$inlineTarget = $(id);\n Instance.$inlineContents = Instance.$inlineTarget.children().detach();\n\n appendObject(Instance.$inlineContents);\n }\n\n /**\n * @method private\n * @name restoreContents\n * @description Restores inline element.\n */\n\n function restoreContents() {\n Instance.$inlineTarget.append(Instance.$inlineContents.detach());\n }\n\n /**\n * @method private\n * @name loadURL\n * @description Load URL into iframe.\n * @param source [string] \"Target URL\"\n */\n\n function loadURL(source) {\n source = source + ((source.indexOf(\"?\") > -1) ? \"&\" + Instance.requestKey + \"=true\" : \"?\" + Instance.requestKey + \"=true\");\n var $iframe = $('');\n appendObject($iframe);\n }\n\n /**\n * @method private\n * @name appendObject\n * @description Appends and sizes object.\n * @param $object [jQuery Object] \"Object to append\"\n */\n\n function appendObject($object) {\n Instance.$content.append($object);\n sizeContent($object);\n openLightbox();\n }\n\n /**\n * @method private\n * @name sizeContent\n * @description Sizes jQuery object to fir in viewport.\n * @param $object [jQuery Object] \"Object to size\"\n */\n\n function sizeContent($object) {\n Instance.windowHeight = Formstone.windowHeight - Instance.mobilePaddingVertical - Instance.paddingVertical;\n Instance.windowWidth = Formstone.windowWidth - Instance.mobilePaddingHorizontal - Instance.paddingHorizontal;\n\n Instance.objectHeight = $object.outerHeight(true);\n Instance.objectWidth = $object.outerWidth(true);\n Instance.targetHeight = Instance.targetHeight || (Instance.$el ? Instance.$el.data(Namespace + \"-height\") : null);\n Instance.targetWidth = Instance.targetWidth || (Instance.$el ? Instance.$el.data(Namespace + \"-width\") : null);\n Instance.maxHeight = (Instance.windowHeight < 0) ? Instance.minHeight : Instance.windowHeight;\n Instance.isIframe = $object.is(\"iframe\");\n Instance.objectMarginTop = 0;\n Instance.objectMarginLeft = 0;\n\n if (!Instance.isMobile) {\n Instance.windowHeight -= Instance.margin;\n Instance.windowWidth -= Instance.margin;\n }\n\n Instance.contentHeight = (Instance.targetHeight) ? Instance.targetHeight : (Instance.isIframe || Instance.isMobile) ? Instance.windowHeight : Instance.objectHeight;\n Instance.contentWidth = (Instance.targetWidth) ? Instance.targetWidth : (Instance.isIframe || Instance.isMobile) ? Instance.windowWidth : Instance.objectWidth;\n\n if ((Instance.isIframe || Instance.isObject) && Instance.isMobile) {\n Instance.contentHeight = Instance.windowHeight;\n Instance.contentWidth = Instance.windowWidth;\n } else if (Instance.isObject) {\n Instance.contentHeight = (Instance.contentHeight > Instance.windowHeight) ? Instance.windowHeight : Instance.contentHeight;\n Instance.contentWidth = (Instance.contentWidth > Instance.windowWidth) ? Instance.windowWidth : Instance.contentWidth;\n }\n\n if (!Instance.isMobile) {\n if (Instance.contentHeight > Instance.maxHeight) {\n Instance.contentHeight = Instance.maxHeight;\n }\n if (Instance.contentWidth > Instance.maxWidth) {\n Instance.contentWidth = Instance.maxWidth;\n }\n }\n }\n\n /**\n * @method private\n * @name loadError\n * @description Error when resource fails to load.\n */\n\n function loadError() {\n var $error = $('

Error Loading Resource

');\n\n // Clean up\n Instance.type = \"element\";\n Instance.$tools.remove();\n\n Instance.$image.off(Events.namespace);\n\n appendObject($error);\n\n $Window.trigger(Events.error);\n }\n\n /**\n * @method private\n * @name calculateNaturalSize\n * @description Determines natural size of target image.\n * @param $img [jQuery object] \"Source image object\"\n * @return [object | boolean] \"Object containing natural height and width values or false\"\n */\n\n function calculateNaturalSize($img) {\n var node = $img[0],\n img = new Image();\n\n if (typeof node.naturalHeight !== \"undefined\") {\n return {\n naturalHeight: node.naturalHeight,\n naturalWidth: node.naturalWidth\n };\n } else {\n if (node.tagName.toLowerCase() === 'img') {\n img.src = node.src;\n return {\n naturalHeight: img.height,\n naturalWidth: img.width\n };\n }\n }\n\n return false;\n }\n\n /**\n * @method private\n * @name checkVideo\n * @description Determines if url is a YouTube or Vimeo url.\n * @param source [string] \"Source url\"\n * @return [boolean] \"True if YouTube or Vimeo url\"\n */\n\n function checkVideo(source) {\n var formats = Instance.videoFormatter,\n parts;\n\n for (var i in formats) {\n if (formats.hasOwnProperty(i)) {\n parts = source.match(formats[i].pattern);\n\n if (parts !== null) {\n return formats[i].format.call(Instance, parts);\n }\n }\n }\n\n return false;\n }\n\n /**\n * @method private\n * @name onDocumentFocus\n * @description Hanle document focus\n * @param e [object] \"Event data\"\n */\n\n function onDocumentFocus(e) {\n var target = e.target;\n\n if (!$.contains(Instance.$lightbox[0], target) && target !== Instance.$lightbox[0] && target !== Instance.$overlay[0]) {\n Functions.killEvent(e);\n\n Instance.$lightbox.focus();\n }\n }\n\n /**\n * @plugin\n * @name Lightbox\n * @description A jQuery plugin for simple modals.\n * @type widget\n * @main lightbox.js\n * @main lightbox.css\n * @dependency jQuery\n * @dependency core.js\n * @dependency touch.js\n * @dependency transition.js\n * @dependency viewer.js (optional)\n */\n\n var Plugin = Formstone.Plugin(\"lightbox\", {\n widget: true,\n\n /**\n * @options\n * @param customClass [string] <''> \"Class applied to instance\"\n * @param fileTypes [regex] <> \"Image file types\"\n * @param fixed [boolean] \"Flag for fixed positioning\"\n * @param formatter [function] <$.noop> \"Caption format function\"\n * @param infinite [boolean] \"Flag for infinite galleries\"\n * @param labels.close [string] <'Close'> \"Close button text\"\n * @param labels.count [string] <'of'> \"Gallery count separator text\"\n * @param labels.next [string] <'Next'> \"Gallery control text\"\n * @param labels.previous [string] <'Previous'> \"Gallery control text\"\n * @param labels.captionClosed [string] <'Close Caption'> \"Mobile caption toggle text, closed state\"\n * @param labels.captionOpen [string] <'View Caption'> \"Mobile caption toggle text, open state\"\n * @param labels.thumbnailsClosed [string] <'Close Thumbnails'> \"Mobile thumbnails toggle text, closed state\"\n * @param labels.thumbnailsOpen [string] <'View Thumbnails'> \"Mobile thumbnails toggle text, open state\"\n * @param labels.lightbox [string] <'Lightbox {guid}'> \"Lightbox aria label; {guid} replaced with instance GUID\"\n * @param margin [int] <50> \"Margin used when sizing (single side)\"\n * @param maxHeight [int] <10000> \"Maximum height of element modal\"\n * @param maxWidth [int] <10000> \"Maximum width of element modal\"\n * @param minHeight [int] <100> \"Minimum height of modal\"\n * @param minWidth [int] <100> \"Minimum width of modal\"\n * @param overlay [boolean] \"Flag to force 'overlay' ('mobile') rendering\"\n * @param retina [boolean] \"Flag to use 'retina' sizing (halves natural sizes)\"\n * @param requestKey [string] <'fs-lightbox'> \"GET variable for ajax / iframe requests\"\n * @param theme [string] <\"fs-light\"> \"Theme class name\"\n * @param thumbnails [boolean] \"Flag to display thumbnail strip\"\n * @param top [int] <0> \"Target top position; over-rides centering\"\n * @param videoFormatter [array] <[]> \"Object of video formatter objects containing a 'pattern' regex and 'format' callback\"\n * @param videoRatio [number] <0.5625> \"Video height / width ratio (9 / 16 = 0.5625)\"\n * @param videoWidth [int] <800> \"Video max width\"\n * @param viewer [boolean] \"Flag to force 'Viewer' rendering, if available\"\n */\n\n defaults: {\n customClass: \"\",\n fileTypes: /\\.(jpg|sjpg|jpeg|png|gif)/i,\n fixed: false,\n formatter: formatCaption,\n infinite: false,\n labels: {\n close: \"Close\",\n count: \"of\",\n next: \"Next\",\n previous: \"Previous\",\n captionClosed: \"View Caption\",\n captionOpen: \"Close Caption\",\n thumbnailsClosed: \"View Thumbnails\",\n thumbnailsOpen: \"Close Thumbnails\",\n lightbox: \"Lightbox {guid}\"\n },\n margin: 50,\n maxHeight: 10000,\n maxWidth: 10000,\n minHeight: 100,\n minWidth: 100,\n mobile: false,\n overlay: false,\n retina: false,\n requestKey: \"fs-lightbox\",\n theme: \"fs-light\",\n thumbnails: false,\n top: 0,\n videoFormatter: {\n \"youtube\": {\n pattern: /(?:youtube\\.com\\/(?:[^\\/]+\\/.+\\/|(?:v|e(?:mbed)?)\\/|.*[?&]v=)|youtu\\.be\\/)([^\"&?\\/ ]{11})/,\n format: formatYouTube\n },\n \"vimeo\": {\n pattern: /(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/,\n format: formatVimeo\n }\n },\n videoRatio: 0.5625,\n videoWidth: 800,\n viewer: true\n },\n\n classes: [\n \"loading\",\n \"animating\",\n // \"scaling\",\n // \"zooming\",\n \"fixed\",\n \"mobile\",\n \"touch\",\n \"inline\",\n \"iframed\",\n \"open\",\n \"ready\",\n \"overlay\",\n \"close\",\n \"loading_icon\",\n \"container\",\n \"content\",\n \"image\",\n \"image_container\",\n \"video\",\n \"video_wrapper\",\n \"tools\",\n \"meta\",\n \"meta_content\",\n \"controls\",\n \"control\",\n \"control_previous\",\n \"control_next\",\n \"control_disabled\",\n \"position\",\n \"position_current\",\n \"position_total\",\n \"toggle\",\n \"caption_toggle\",\n \"caption\",\n \"caption_open\",\n \"thumbnailed\",\n \"thumbnails_open\",\n \"thumbnail_toggle\",\n \"thumbnails\",\n \"thumbnail_container\",\n \"thumbnail_item\",\n \"active\",\n \"has_controls\",\n \"has_caption\",\n \"iframe\",\n \"error\",\n \"active\",\n \"lock\"\n ],\n\n /**\n * @events\n * @event open.lightbox \"Lightbox opened; Triggered on window\"\n * @event close.lightbox \"Lightbox closed; Triggered on window\"\n * @event error.lightbox \"Lightbox error; Triggered on window\"\n */\n\n events: {\n open: \"open\",\n close: \"close\"\n },\n\n methods: {\n _construct: construct,\n _destruct: destruct,\n _resize: resize,\n\n resize: resizeLightbox\n },\n\n utilities: {\n _initialize: initialize,\n\n close: closeLightbox\n }\n }),\n\n // Localize References\n\n Namespace = Plugin.namespace,\n Defaults = Plugin.defaults,\n Classes = Plugin.classes,\n RawClasses = Classes.raw,\n Events = Plugin.events,\n Functions = Plugin.functions,\n Window = Formstone.window,\n $Window = Formstone.$window,\n $Body = null,\n\n // Internal\n\n $Locks = null,\n OnLoad = false,\n OnLoaded = false,\n\n // Singleton\n\n Instance = null;\n\n // Setup\n\n Formstone.Ready(setup);\n\n })\n\n);\n"],"names":["factory","define","amd","jQuery","Formstone","$","setup","$Body","$body","$Locks","OnLoad","window","location","hash","replace","resize","Instance","resizeLightbox","construct","data","this","on","Events","click","buildLightbox","gallery","Namespace","OnLoaded","trigger","destruct","closeLightbox","off","namespace","initialize","$target","options","apply","Window","extend","$object","Defaults","e","overlay","mobile","visible","active","isMobile","isTouch","support","touch","isAnimating","isZooming","oldContentHeight","oldContentWidth","metaHeight","thumbnailHeight","captionOpen","thumbnailsOpen","tapTimer","isViewer","viewer","fn","fsViewer","$el","source","href","type","toLowerCase","split","pop","isImage","match","fileTypes","substr","isVideo","checkVideo","isUrl","isElement","isObject","Functions","killEvent","margin","id","$items","index","total","length","thumbnails","html","RawClasses","theme","customClass","join","lightboxClasses","base","loading","animating","fixed","push","iframed","inline","thumbnailed","labels","lightbox","numGuid","close","loading_icon","container","thumbnail_container","$item","thumb","i","count","eq","find","attr","thumbnail_item","content","tools","controls","control","control_previous","previous","control_next","next","toggle","caption_toggle","captionClosed","thumbnail_toggle","thumbnailsClosed","meta","meta_content","position","position_current","position_total","caption","formatter","call","append","$overlay","Classes","$lightbox","$close","$container","$content","$tools","$meta","$metaContent","$position","$caption","$controlBox","$controls","$thumbnails","$thumbnailContainer","$thumbnailItems","paddingVertical","outerHeight","paddingHorizontal","mobilePaddingVertical","parseInt","css","mobilePaddingHorizontal","contentHeight","contentWidth","outerWidth","controlHeight","centerLightbox","addClass","has_controls","updateGalleryControls","$Window","keyDown","onKeyDown","focus","focusIn","onDocumentFocus","advanceGallery","jumpGallery","toggleCaption","toggleThumbnails","fsTransition","property","loadImage","loadVideo","loadURL","appendContents","appendObject","open","targetHeight","arguments","targetWidth","sizeContent","sizeImage","sizeVideo","sizeLightbox","$inlineTarget","restoreContents","$imageContainer","remove","removeClass","lock","unlockViewport","openLightbox","calculatePosition","duration","lockViewport","marginTop","hide","has_caption","show","ready","preloadGallery","updateThumbnails","positionThumbnails","height","width","top","contentHasChanged","left","pos","windowWidth","windowHeight","scrollTop","closeCaption","closeThumbnails","caption_open","text","formatCaption","title","t","undefined","thumbnails_open","image_container","$image","image","prepend","one","load","naturalSize","calculateNaturalSize","naturalHeight","naturalWidth","retina","error","loadError","complete","readyState","viewportHeight","viewportWidth","Infinity","imageMarginTop","imageMarginLeft","imageHeight","imageWidth","spacerHeight","ratioHorizontal","ratioVertical","isWide","minHeight","minWidth","fitImage","targetImageHeight","targetImageWidth","marginLeft","formatYouTube","parts","formatVimeo","url","queryString","slice","trim","$videoWrapper","video_wrapper","$video","video","prependTo","videoMarginTop","videoMarginLeft","targetVideoWidth","targetVideoHeight","videoRatio","videoWidth","$control","currentTarget","hasClass","control_disabled","cleanGallery","$thumbnail","$thumb","scrollLeft","stop","animate","infinite","filter","keyCode","$inlineContents","children","detach","indexOf","requestKey","$iframe","iframe","objectHeight","objectWidth","maxHeight","isIframe","is","objectMarginTop","objectMarginLeft","maxWidth","$error","$img","node","img","Image","tagName","src","formats","videoFormatter","hasOwnProperty","pattern","format","target","contains","Plugin","widget","defaults","youtube","vimeo","classes","events","methods","_construct","_destruct","_resize","utilities","_initialize","raw","functions","$window","Ready"],"mappings":"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"}