{"version":3,"file":"index-TNmWPz0K.js","sources":["../../../../TheVp.Frontend/node_modules/lightgallery/lightgallery.es5.js","../../../../TheVp.Frontend/node_modules/lightgallery/plugins/thumbnail/lg-thumbnail.es5.js","../../../../TheVp.Frontend/node_modules/lightgallery/plugins/zoom/lg-zoom.es5.js","../../../../TheVp.Frontend/node_modules/flickr-justified-gallery/dist/fjGallery.esm.js","../../../../TheVp.Frontend/scripts/components/light-gallery/index.js"],"sourcesContent":["/*!\n * lightgallery | 2.7.2 | September 20th 2023\n * http://www.lightgalleryjs.com/\n * Copyright (c) 2020 Sachin Neravath;\n * @license GPLv3\n */\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\n\n/**\r\n * List of lightGallery events\r\n * All events should be documented here\r\n * Below interfaces are used to build the website documentations\r\n * */\r\nvar lGEvents = {\r\n afterAppendSlide: 'lgAfterAppendSlide',\r\n init: 'lgInit',\r\n hasVideo: 'lgHasVideo',\r\n containerResize: 'lgContainerResize',\r\n updateSlides: 'lgUpdateSlides',\r\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\r\n beforeOpen: 'lgBeforeOpen',\r\n afterOpen: 'lgAfterOpen',\r\n slideItemLoad: 'lgSlideItemLoad',\r\n beforeSlide: 'lgBeforeSlide',\r\n afterSlide: 'lgAfterSlide',\r\n posterClick: 'lgPosterClick',\r\n dragStart: 'lgDragStart',\r\n dragMove: 'lgDragMove',\r\n dragEnd: 'lgDragEnd',\r\n beforeNextSlide: 'lgBeforeNextSlide',\r\n beforePrevSlide: 'lgBeforePrevSlide',\r\n beforeClose: 'lgBeforeClose',\r\n afterClose: 'lgAfterClose',\r\n rotateLeft: 'lgRotateLeft',\r\n rotateRight: 'lgRotateRight',\r\n flipHorizontal: 'lgFlipHorizontal',\r\n flipVertical: 'lgFlipVertical',\r\n autoplay: 'lgAutoplay',\r\n autoplayStart: 'lgAutoplayStart',\r\n autoplayStop: 'lgAutoplayStop',\r\n};\n\nvar lightGalleryCoreSettings = {\r\n mode: 'lg-slide',\r\n easing: 'ease',\r\n speed: 400,\r\n licenseKey: '0000-0000-000-0000',\r\n height: '100%',\r\n width: '100%',\r\n addClass: '',\r\n startClass: 'lg-start-zoom',\r\n backdropDuration: 300,\r\n container: '',\r\n startAnimationDuration: 400,\r\n zoomFromOrigin: true,\r\n hideBarsDelay: 0,\r\n showBarsAfter: 10000,\r\n slideDelay: 0,\r\n supportLegacyBrowser: true,\r\n allowMediaOverlap: false,\r\n videoMaxSize: '1280-720',\r\n loadYouTubePoster: true,\r\n defaultCaptionHeight: 0,\r\n ariaLabelledby: '',\r\n ariaDescribedby: '',\r\n resetScrollPosition: true,\r\n hideScrollbar: false,\r\n closable: true,\r\n swipeToClose: true,\r\n closeOnTap: true,\r\n showCloseIcon: true,\r\n showMaximizeIcon: false,\r\n loop: true,\r\n escKey: true,\r\n keyPress: true,\r\n trapFocus: true,\r\n controls: true,\r\n slideEndAnimation: true,\r\n hideControlOnEnd: false,\r\n mousewheel: false,\r\n getCaptionFromTitleOrAlt: true,\r\n appendSubHtmlTo: '.lg-sub-html',\r\n subHtmlSelectorRelative: false,\r\n preload: 2,\r\n numberOfSlideItemsInDom: 10,\r\n selector: '',\r\n selectWithin: '',\r\n nextHtml: '',\r\n prevHtml: '',\r\n index: 0,\r\n iframeWidth: '100%',\r\n iframeHeight: '100%',\r\n iframeMaxWidth: '100%',\r\n iframeMaxHeight: '100%',\r\n download: true,\r\n counter: true,\r\n appendCounterTo: '.lg-toolbar',\r\n swipeThreshold: 50,\r\n enableSwipe: true,\r\n enableDrag: true,\r\n dynamic: false,\r\n dynamicEl: [],\r\n extraProps: [],\r\n exThumbImage: '',\r\n isMobile: undefined,\r\n mobileSettings: {\r\n controls: false,\r\n showCloseIcon: false,\r\n download: false,\r\n },\r\n plugins: [],\r\n strings: {\r\n closeGallery: 'Close gallery',\r\n toggleMaximize: 'Toggle maximize',\r\n previousSlide: 'Previous slide',\r\n nextSlide: 'Next slide',\r\n download: 'Download',\r\n playVideo: 'Play video',\r\n mediaLoadingFailed: 'Oops... Failed to load content...',\r\n },\r\n};\n\nfunction initLgPolyfills() {\r\n (function () {\r\n if (typeof window.CustomEvent === 'function')\r\n return false;\r\n function CustomEvent(event, params) {\r\n params = params || {\r\n bubbles: false,\r\n cancelable: false,\r\n detail: null,\r\n };\r\n var evt = document.createEvent('CustomEvent');\r\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\r\n return evt;\r\n }\r\n window.CustomEvent = CustomEvent;\r\n })();\r\n (function () {\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches =\r\n Element.prototype.msMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector;\r\n }\r\n })();\r\n}\r\nvar lgQuery = /** @class */ (function () {\r\n function lgQuery(selector) {\r\n this.cssVenderPrefixes = [\r\n 'TransitionDuration',\r\n 'TransitionTimingFunction',\r\n 'Transform',\r\n 'Transition',\r\n ];\r\n this.selector = this._getSelector(selector);\r\n this.firstElement = this._getFirstEl();\r\n return this;\r\n }\r\n lgQuery.generateUUID = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n };\r\n lgQuery.prototype._getSelector = function (selector, context) {\r\n if (context === void 0) { context = document; }\r\n if (typeof selector !== 'string') {\r\n return selector;\r\n }\r\n context = context || document;\r\n var fl = selector.substring(0, 1);\r\n if (fl === '#') {\r\n return context.querySelector(selector);\r\n }\r\n else {\r\n return context.querySelectorAll(selector);\r\n }\r\n };\r\n lgQuery.prototype._each = function (func) {\r\n if (!this.selector) {\r\n return this;\r\n }\r\n if (this.selector.length !== undefined) {\r\n [].forEach.call(this.selector, func);\r\n }\r\n else {\r\n func(this.selector, 0);\r\n }\r\n return this;\r\n };\r\n lgQuery.prototype._setCssVendorPrefix = function (el, cssProperty, value) {\r\n // prettier-ignore\r\n var property = cssProperty.replace(/-([a-z])/gi, function (s, group1) {\r\n return group1.toUpperCase();\r\n });\r\n if (this.cssVenderPrefixes.indexOf(property) !== -1) {\r\n el.style[property.charAt(0).toLowerCase() + property.slice(1)] = value;\r\n el.style['webkit' + property] = value;\r\n el.style['moz' + property] = value;\r\n el.style['ms' + property] = value;\r\n el.style['o' + property] = value;\r\n }\r\n else {\r\n el.style[property] = value;\r\n }\r\n };\r\n lgQuery.prototype._getFirstEl = function () {\r\n if (this.selector && this.selector.length !== undefined) {\r\n return this.selector[0];\r\n }\r\n else {\r\n return this.selector;\r\n }\r\n };\r\n lgQuery.prototype.isEventMatched = function (event, eventName) {\r\n var eventNamespace = eventName.split('.');\r\n return event\r\n .split('.')\r\n .filter(function (e) { return e; })\r\n .every(function (e) {\r\n return eventNamespace.indexOf(e) !== -1;\r\n });\r\n };\r\n lgQuery.prototype.attr = function (attr, value) {\r\n if (value === undefined) {\r\n if (!this.firstElement) {\r\n return '';\r\n }\r\n return this.firstElement.getAttribute(attr);\r\n }\r\n this._each(function (el) {\r\n el.setAttribute(attr, value);\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.find = function (selector) {\r\n return $LG(this._getSelector(selector, this.selector));\r\n };\r\n lgQuery.prototype.first = function () {\r\n if (this.selector && this.selector.length !== undefined) {\r\n return $LG(this.selector[0]);\r\n }\r\n else {\r\n return $LG(this.selector);\r\n }\r\n };\r\n lgQuery.prototype.eq = function (index) {\r\n return $LG(this.selector[index]);\r\n };\r\n lgQuery.prototype.parent = function () {\r\n return $LG(this.selector.parentElement);\r\n };\r\n lgQuery.prototype.get = function () {\r\n return this._getFirstEl();\r\n };\r\n lgQuery.prototype.removeAttr = function (attributes) {\r\n var attrs = attributes.split(' ');\r\n this._each(function (el) {\r\n attrs.forEach(function (attr) { return el.removeAttribute(attr); });\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.wrap = function (className) {\r\n if (!this.firstElement) {\r\n return this;\r\n }\r\n var wrapper = document.createElement('div');\r\n wrapper.className = className;\r\n this.firstElement.parentNode.insertBefore(wrapper, this.firstElement);\r\n this.firstElement.parentNode.removeChild(this.firstElement);\r\n wrapper.appendChild(this.firstElement);\r\n return this;\r\n };\r\n lgQuery.prototype.addClass = function (classNames) {\r\n if (classNames === void 0) { classNames = ''; }\r\n this._each(function (el) {\r\n // IE doesn't support multiple arguments\r\n classNames.split(' ').forEach(function (className) {\r\n if (className) {\r\n el.classList.add(className);\r\n }\r\n });\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.removeClass = function (classNames) {\r\n this._each(function (el) {\r\n // IE doesn't support multiple arguments\r\n classNames.split(' ').forEach(function (className) {\r\n if (className) {\r\n el.classList.remove(className);\r\n }\r\n });\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.hasClass = function (className) {\r\n if (!this.firstElement) {\r\n return false;\r\n }\r\n return this.firstElement.classList.contains(className);\r\n };\r\n lgQuery.prototype.hasAttribute = function (attribute) {\r\n if (!this.firstElement) {\r\n return false;\r\n }\r\n return this.firstElement.hasAttribute(attribute);\r\n };\r\n lgQuery.prototype.toggleClass = function (className) {\r\n if (!this.firstElement) {\r\n return this;\r\n }\r\n if (this.hasClass(className)) {\r\n this.removeClass(className);\r\n }\r\n else {\r\n this.addClass(className);\r\n }\r\n return this;\r\n };\r\n lgQuery.prototype.css = function (property, value) {\r\n var _this = this;\r\n this._each(function (el) {\r\n _this._setCssVendorPrefix(el, property, value);\r\n });\r\n return this;\r\n };\r\n // Need to pass separate namespaces for separate elements\r\n lgQuery.prototype.on = function (events, listener) {\r\n var _this = this;\r\n if (!this.selector) {\r\n return this;\r\n }\r\n events.split(' ').forEach(function (event) {\r\n if (!Array.isArray(lgQuery.eventListeners[event])) {\r\n lgQuery.eventListeners[event] = [];\r\n }\r\n lgQuery.eventListeners[event].push(listener);\r\n _this.selector.addEventListener(event.split('.')[0], listener);\r\n });\r\n return this;\r\n };\r\n // @todo - test this\r\n lgQuery.prototype.once = function (event, listener) {\r\n var _this = this;\r\n this.on(event, function () {\r\n _this.off(event);\r\n listener(event);\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.off = function (event) {\r\n var _this = this;\r\n if (!this.selector) {\r\n return this;\r\n }\r\n Object.keys(lgQuery.eventListeners).forEach(function (eventName) {\r\n if (_this.isEventMatched(event, eventName)) {\r\n lgQuery.eventListeners[eventName].forEach(function (listener) {\r\n _this.selector.removeEventListener(eventName.split('.')[0], listener);\r\n });\r\n lgQuery.eventListeners[eventName] = [];\r\n }\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.trigger = function (event, detail) {\r\n if (!this.firstElement) {\r\n return this;\r\n }\r\n var customEvent = new CustomEvent(event.split('.')[0], {\r\n detail: detail || null,\r\n });\r\n this.firstElement.dispatchEvent(customEvent);\r\n return this;\r\n };\r\n // Does not support IE\r\n lgQuery.prototype.load = function (url) {\r\n var _this = this;\r\n fetch(url)\r\n .then(function (res) { return res.text(); })\r\n .then(function (html) {\r\n _this.selector.innerHTML = html;\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.html = function (html) {\r\n if (html === undefined) {\r\n if (!this.firstElement) {\r\n return '';\r\n }\r\n return this.firstElement.innerHTML;\r\n }\r\n this._each(function (el) {\r\n el.innerHTML = html;\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.append = function (html) {\r\n this._each(function (el) {\r\n if (typeof html === 'string') {\r\n el.insertAdjacentHTML('beforeend', html);\r\n }\r\n else {\r\n el.appendChild(html);\r\n }\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.prepend = function (html) {\r\n this._each(function (el) {\r\n el.insertAdjacentHTML('afterbegin', html);\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.remove = function () {\r\n this._each(function (el) {\r\n el.parentNode.removeChild(el);\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.empty = function () {\r\n this._each(function (el) {\r\n el.innerHTML = '';\r\n });\r\n return this;\r\n };\r\n lgQuery.prototype.scrollTop = function (scrollTop) {\r\n if (scrollTop !== undefined) {\r\n document.body.scrollTop = scrollTop;\r\n document.documentElement.scrollTop = scrollTop;\r\n return this;\r\n }\r\n else {\r\n return (window.pageYOffset ||\r\n document.documentElement.scrollTop ||\r\n document.body.scrollTop ||\r\n 0);\r\n }\r\n };\r\n lgQuery.prototype.scrollLeft = function (scrollLeft) {\r\n if (scrollLeft !== undefined) {\r\n document.body.scrollLeft = scrollLeft;\r\n document.documentElement.scrollLeft = scrollLeft;\r\n return this;\r\n }\r\n else {\r\n return (window.pageXOffset ||\r\n document.documentElement.scrollLeft ||\r\n document.body.scrollLeft ||\r\n 0);\r\n }\r\n };\r\n lgQuery.prototype.offset = function () {\r\n if (!this.firstElement) {\r\n return {\r\n left: 0,\r\n top: 0,\r\n };\r\n }\r\n var rect = this.firstElement.getBoundingClientRect();\r\n var bodyMarginLeft = $LG('body').style().marginLeft;\r\n // Minus body margin - https://stackoverflow.com/questions/30711548/is-getboundingclientrect-left-returning-a-wrong-value\r\n return {\r\n left: rect.left - parseFloat(bodyMarginLeft) + this.scrollLeft(),\r\n top: rect.top + this.scrollTop(),\r\n };\r\n };\r\n lgQuery.prototype.style = function () {\r\n if (!this.firstElement) {\r\n return {};\r\n }\r\n return (this.firstElement.currentStyle ||\r\n window.getComputedStyle(this.firstElement));\r\n };\r\n // Width without padding and border even if box-sizing is used.\r\n lgQuery.prototype.width = function () {\r\n var style = this.style();\r\n return (this.firstElement.clientWidth -\r\n parseFloat(style.paddingLeft) -\r\n parseFloat(style.paddingRight));\r\n };\r\n // Height without padding and border even if box-sizing is used.\r\n lgQuery.prototype.height = function () {\r\n var style = this.style();\r\n return (this.firstElement.clientHeight -\r\n parseFloat(style.paddingTop) -\r\n parseFloat(style.paddingBottom));\r\n };\r\n lgQuery.eventListeners = {};\r\n return lgQuery;\r\n}());\r\nfunction $LG(selector) {\r\n initLgPolyfills();\r\n return new lgQuery(selector);\r\n}\n\nvar defaultDynamicOptions = [\r\n 'src',\r\n 'sources',\r\n 'subHtml',\r\n 'subHtmlUrl',\r\n 'html',\r\n 'video',\r\n 'poster',\r\n 'slideName',\r\n 'responsive',\r\n 'srcset',\r\n 'sizes',\r\n 'iframe',\r\n 'downloadUrl',\r\n 'download',\r\n 'width',\r\n 'facebookShareUrl',\r\n 'tweetText',\r\n 'iframeTitle',\r\n 'twitterShareUrl',\r\n 'pinterestShareUrl',\r\n 'pinterestText',\r\n 'fbHtml',\r\n 'disqusIdentifier',\r\n 'disqusUrl',\r\n];\r\n// Convert html data-attribute to camalcase\r\nfunction convertToData(attr) {\r\n // FInd a way for lgsize\r\n if (attr === 'href') {\r\n return 'src';\r\n }\r\n attr = attr.replace('data-', '');\r\n attr = attr.charAt(0).toLowerCase() + attr.slice(1);\r\n attr = attr.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); });\r\n return attr;\r\n}\r\nvar utils = {\r\n /**\r\n * get possible width and height from the lgSize attribute. Used for ZoomFromOrigin option\r\n */\r\n getSize: function (el, container, spacing, defaultLgSize) {\r\n if (spacing === void 0) { spacing = 0; }\r\n var LGel = $LG(el);\r\n var lgSize = LGel.attr('data-lg-size') || defaultLgSize;\r\n if (!lgSize) {\r\n return;\r\n }\r\n var isResponsiveSizes = lgSize.split(',');\r\n // if at-least two viewport sizes are available\r\n if (isResponsiveSizes[1]) {\r\n var wWidth = window.innerWidth;\r\n for (var i = 0; i < isResponsiveSizes.length; i++) {\r\n var size_1 = isResponsiveSizes[i];\r\n var responsiveWidth = parseInt(size_1.split('-')[2], 10);\r\n if (responsiveWidth > wWidth) {\r\n lgSize = size_1;\r\n break;\r\n }\r\n // take last item as last option\r\n if (i === isResponsiveSizes.length - 1) {\r\n lgSize = size_1;\r\n }\r\n }\r\n }\r\n var size = lgSize.split('-');\r\n var width = parseInt(size[0], 10);\r\n var height = parseInt(size[1], 10);\r\n var cWidth = container.width();\r\n var cHeight = container.height() - spacing;\r\n var maxWidth = Math.min(cWidth, width);\r\n var maxHeight = Math.min(cHeight, height);\r\n var ratio = Math.min(maxWidth / width, maxHeight / height);\r\n return { width: width * ratio, height: height * ratio };\r\n },\r\n /**\r\n * @desc Get transform value based on the imageSize. Used for ZoomFromOrigin option\r\n * @param {jQuery Element}\r\n * @returns {String} Transform CSS string\r\n */\r\n getTransform: function (el, container, top, bottom, imageSize) {\r\n if (!imageSize) {\r\n return;\r\n }\r\n var LGel = $LG(el).find('img').first();\r\n if (!LGel.get()) {\r\n return;\r\n }\r\n var containerRect = container.get().getBoundingClientRect();\r\n var wWidth = containerRect.width;\r\n // using innerWidth to include mobile safari bottom bar\r\n var wHeight = container.height() - (top + bottom);\r\n var elWidth = LGel.width();\r\n var elHeight = LGel.height();\r\n var elStyle = LGel.style();\r\n var x = (wWidth - elWidth) / 2 -\r\n LGel.offset().left +\r\n (parseFloat(elStyle.paddingLeft) || 0) +\r\n (parseFloat(elStyle.borderLeft) || 0) +\r\n $LG(window).scrollLeft() +\r\n containerRect.left;\r\n var y = (wHeight - elHeight) / 2 -\r\n LGel.offset().top +\r\n (parseFloat(elStyle.paddingTop) || 0) +\r\n (parseFloat(elStyle.borderTop) || 0) +\r\n $LG(window).scrollTop() +\r\n top;\r\n var scX = elWidth / imageSize.width;\r\n var scY = elHeight / imageSize.height;\r\n var transform = 'translate3d(' +\r\n (x *= -1) +\r\n 'px, ' +\r\n (y *= -1) +\r\n 'px, 0) scale3d(' +\r\n scX +\r\n ', ' +\r\n scY +\r\n ', 1)';\r\n return transform;\r\n },\r\n getIframeMarkup: function (iframeWidth, iframeHeight, iframeMaxWidth, iframeMaxHeight, src, iframeTitle) {\r\n var title = iframeTitle ? 'title=\"' + iframeTitle + '\"' : '';\r\n return \"
\\n \\n
\";\r\n },\r\n getImgMarkup: function (index, src, altAttr, srcset, sizes, sources) {\r\n var srcsetAttr = srcset ? \"srcset=\\\"\" + srcset + \"\\\"\" : '';\r\n var sizesAttr = sizes ? \"sizes=\\\"\" + sizes + \"\\\"\" : '';\r\n var imgMarkup = \"\";\r\n var sourceTag = '';\r\n if (sources) {\r\n var sourceObj = typeof sources === 'string' ? JSON.parse(sources) : sources;\r\n sourceTag = sourceObj.map(function (source) {\r\n var attrs = '';\r\n Object.keys(source).forEach(function (key) {\r\n // Do not remove the first space as it is required to separate the attributes\r\n attrs += \" \" + key + \"=\\\"\" + source[key] + \"\\\"\";\r\n });\r\n return \"\";\r\n });\r\n }\r\n return \"\" + sourceTag + imgMarkup;\r\n },\r\n // Get src from responsive src\r\n getResponsiveSrc: function (srcItms) {\r\n var rsWidth = [];\r\n var rsSrc = [];\r\n var src = '';\r\n for (var i = 0; i < srcItms.length; i++) {\r\n var _src = srcItms[i].split(' ');\r\n // Manage empty space\r\n if (_src[0] === '') {\r\n _src.splice(0, 1);\r\n }\r\n rsSrc.push(_src[0]);\r\n rsWidth.push(_src[1]);\r\n }\r\n var wWidth = window.innerWidth;\r\n for (var j = 0; j < rsWidth.length; j++) {\r\n if (parseInt(rsWidth[j], 10) > wWidth) {\r\n src = rsSrc[j];\r\n break;\r\n }\r\n }\r\n return src;\r\n },\r\n isImageLoaded: function (img) {\r\n if (!img)\r\n return false;\r\n // During the onload event, IE correctly identifies any images that\r\n // weren’t downloaded as not complete. Others should too. Gecko-based\r\n // browsers act like NS4 in that they report this incorrectly.\r\n if (!img.complete) {\r\n return false;\r\n }\r\n // However, they do have two very useful properties: naturalWidth and\r\n // naturalHeight. These give the true size of the image. If it failed\r\n // to load, either of these should be zero.\r\n if (img.naturalWidth === 0) {\r\n return false;\r\n }\r\n // No other way of checking: assume it’s ok.\r\n return true;\r\n },\r\n getVideoPosterMarkup: function (_poster, dummyImg, videoContStyle, playVideoString, _isVideo) {\r\n var videoClass = '';\r\n if (_isVideo && _isVideo.youtube) {\r\n videoClass = 'lg-has-youtube';\r\n }\r\n else if (_isVideo && _isVideo.vimeo) {\r\n videoClass = 'lg-has-vimeo';\r\n }\r\n else {\r\n videoClass = 'lg-has-html5';\r\n }\r\n return \"
\\n
\\n \\n \" + playVideoString + \"\\n \\n \\n \\n \\n \\n \\n \\n
\\n \" + (dummyImg || '') + \"\\n \\n
\";\r\n },\r\n getFocusableElements: function (container) {\r\n var elements = container.querySelectorAll('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type=\"text\"]:not([disabled]), input[type=\"radio\"]:not([disabled]), input[type=\"checkbox\"]:not([disabled]), select:not([disabled])');\r\n var visibleElements = [].filter.call(elements, function (element) {\r\n var style = window.getComputedStyle(element);\r\n return style.display !== 'none' && style.visibility !== 'hidden';\r\n });\r\n return visibleElements;\r\n },\r\n /**\r\n * @desc Create dynamic elements array from gallery items when dynamic option is false\r\n * It helps to avoid frequent DOM interaction\r\n * and avoid multiple checks for dynamic elments\r\n *\r\n * @returns {Array} dynamicEl\r\n */\r\n getDynamicOptions: function (items, extraProps, getCaptionFromTitleOrAlt, exThumbImage) {\r\n var dynamicElements = [];\r\n var availableDynamicOptions = __spreadArrays(defaultDynamicOptions, extraProps);\r\n [].forEach.call(items, function (item) {\r\n var dynamicEl = {};\r\n for (var i = 0; i < item.attributes.length; i++) {\r\n var attr = item.attributes[i];\r\n if (attr.specified) {\r\n var dynamicAttr = convertToData(attr.name);\r\n var label = '';\r\n if (availableDynamicOptions.indexOf(dynamicAttr) > -1) {\r\n label = dynamicAttr;\r\n }\r\n if (label) {\r\n dynamicEl[label] = attr.value;\r\n }\r\n }\r\n }\r\n var currentItem = $LG(item);\r\n var alt = currentItem.find('img').first().attr('alt');\r\n var title = currentItem.attr('title');\r\n var thumb = exThumbImage\r\n ? currentItem.attr(exThumbImage)\r\n : currentItem.find('img').first().attr('src');\r\n dynamicEl.thumb = thumb;\r\n if (getCaptionFromTitleOrAlt && !dynamicEl.subHtml) {\r\n dynamicEl.subHtml = title || alt || '';\r\n }\r\n dynamicEl.alt = alt || title || '';\r\n dynamicElements.push(dynamicEl);\r\n });\r\n return dynamicElements;\r\n },\r\n isMobile: function () {\r\n return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\r\n },\r\n /**\r\n * @desc Check the given src is video\r\n * @param {String} src\r\n * @return {Object} video type\r\n * Ex:{ youtube : [\"//www.youtube.com/watch?v=c0asJgSyxcY\", \"c0asJgSyxcY\"] }\r\n *\r\n * @todo - this information can be moved to dynamicEl to avoid frequent calls\r\n */\r\n isVideo: function (src, isHTML5VIdeo, index) {\r\n if (!src) {\r\n if (isHTML5VIdeo) {\r\n return {\r\n html5: true,\r\n };\r\n }\r\n else {\r\n console.error('lightGallery :- data-src is not provided on slide item ' +\r\n (index + 1) +\r\n '. Please make sure the selector property is properly configured. More info - https://www.lightgalleryjs.com/demos/html-markup/');\r\n return;\r\n }\r\n }\r\n var youtube = src.match(/\\/\\/(?:www\\.)?youtu(?:\\.be|be\\.com|be-nocookie\\.com)\\/(?:watch\\?v=|embed\\/)?([a-z0-9\\-\\_\\%]+)([\\&|?][\\S]*)*/i);\r\n var vimeo = src.match(/\\/\\/(?:www\\.)?(?:player\\.)?vimeo.com\\/(?:video\\/)?([0-9a-z\\-_]+)(.*)?/i);\r\n var wistia = src.match(/https?:\\/\\/(.+)?(wistia\\.com|wi\\.st)\\/(medias|embed)\\/([0-9a-z\\-_]+)(.*)/);\r\n if (youtube) {\r\n return {\r\n youtube: youtube,\r\n };\r\n }\r\n else if (vimeo) {\r\n return {\r\n vimeo: vimeo,\r\n };\r\n }\r\n else if (wistia) {\r\n return {\r\n wistia: wistia,\r\n };\r\n }\r\n },\r\n};\n\n// @ref - https://stackoverflow.com/questions/3971841/how-to-resize-images-proportionally-keeping-the-aspect-ratio\r\n// @ref - https://2ality.com/2017/04/setting-up-multi-platform-packages.html\r\n// Unique id for each gallery\r\nvar lgId = 0;\r\nvar LightGallery = /** @class */ (function () {\r\n function LightGallery(element, options) {\r\n this.lgOpened = false;\r\n this.index = 0;\r\n // lightGallery modules\r\n this.plugins = [];\r\n // false when lightGallery load first slide content;\r\n this.lGalleryOn = false;\r\n // True when a slide animation is in progress\r\n this.lgBusy = false;\r\n this.currentItemsInDom = [];\r\n // Scroll top value before lightGallery is opened\r\n this.prevScrollTop = 0;\r\n this.bodyPaddingRight = 0;\r\n this.isDummyImageRemoved = false;\r\n this.dragOrSwipeEnabled = false;\r\n this.mediaContainerPosition = {\r\n top: 0,\r\n bottom: 0,\r\n };\r\n if (!element) {\r\n return this;\r\n }\r\n lgId++;\r\n this.lgId = lgId;\r\n this.el = element;\r\n this.LGel = $LG(element);\r\n this.generateSettings(options);\r\n this.buildModules();\r\n // When using dynamic mode, ensure dynamicEl is an array\r\n if (this.settings.dynamic &&\r\n this.settings.dynamicEl !== undefined &&\r\n !Array.isArray(this.settings.dynamicEl)) {\r\n throw 'When using dynamic mode, you must also define dynamicEl as an Array.';\r\n }\r\n this.galleryItems = this.getItems();\r\n this.normalizeSettings();\r\n // Gallery items\r\n this.init();\r\n this.validateLicense();\r\n return this;\r\n }\r\n LightGallery.prototype.generateSettings = function (options) {\r\n // lightGallery settings\r\n this.settings = __assign(__assign({}, lightGalleryCoreSettings), options);\r\n if (this.settings.isMobile &&\r\n typeof this.settings.isMobile === 'function'\r\n ? this.settings.isMobile()\r\n : utils.isMobile()) {\r\n var mobileSettings = __assign(__assign({}, this.settings.mobileSettings), this.settings.mobileSettings);\r\n this.settings = __assign(__assign({}, this.settings), mobileSettings);\r\n }\r\n };\r\n LightGallery.prototype.normalizeSettings = function () {\r\n if (this.settings.slideEndAnimation) {\r\n this.settings.hideControlOnEnd = false;\r\n }\r\n if (!this.settings.closable) {\r\n this.settings.swipeToClose = false;\r\n }\r\n // And reset it on close to get the correct value next time\r\n this.zoomFromOrigin = this.settings.zoomFromOrigin;\r\n // At the moment, Zoom from image doesn't support dynamic options\r\n // @todo add zoomFromOrigin support for dynamic images\r\n if (this.settings.dynamic) {\r\n this.zoomFromOrigin = false;\r\n }\r\n if (!this.settings.container) {\r\n this.settings.container = document.body;\r\n }\r\n // settings.preload should not be grater than $item.length\r\n this.settings.preload = Math.min(this.settings.preload, this.galleryItems.length);\r\n };\r\n LightGallery.prototype.init = function () {\r\n var _this = this;\r\n this.addSlideVideoInfo(this.galleryItems);\r\n this.buildStructure();\r\n this.LGel.trigger(lGEvents.init, {\r\n instance: this,\r\n });\r\n if (this.settings.keyPress) {\r\n this.keyPress();\r\n }\r\n setTimeout(function () {\r\n _this.enableDrag();\r\n _this.enableSwipe();\r\n _this.triggerPosterClick();\r\n }, 50);\r\n this.arrow();\r\n if (this.settings.mousewheel) {\r\n this.mousewheel();\r\n }\r\n if (!this.settings.dynamic) {\r\n this.openGalleryOnItemClick();\r\n }\r\n };\r\n LightGallery.prototype.openGalleryOnItemClick = function () {\r\n var _this = this;\r\n var _loop_1 = function (index) {\r\n var element = this_1.items[index];\r\n var $element = $LG(element);\r\n // Using different namespace for click because click event should not unbind if selector is same object('this')\r\n // @todo manage all event listners - should have namespace that represent element\r\n var uuid = lgQuery.generateUUID();\r\n $element\r\n .attr('data-lg-id', uuid)\r\n .on(\"click.lgcustom-item-\" + uuid, function (e) {\r\n e.preventDefault();\r\n var currentItemIndex = _this.settings.index || index;\r\n _this.openGallery(currentItemIndex, element);\r\n });\r\n };\r\n var this_1 = this;\r\n // Using for loop instead of using bubbling as the items can be any html element.\r\n for (var index = 0; index < this.items.length; index++) {\r\n _loop_1(index);\r\n }\r\n };\r\n /**\r\n * Module constructor\r\n * Modules are build incrementally.\r\n * Gallery should be opened only once all the modules are initialized.\r\n * use moduleBuildTimeout to make sure this\r\n */\r\n LightGallery.prototype.buildModules = function () {\r\n var _this = this;\r\n this.settings.plugins.forEach(function (plugin) {\r\n _this.plugins.push(new plugin(_this, $LG));\r\n });\r\n };\r\n LightGallery.prototype.validateLicense = function () {\r\n if (!this.settings.licenseKey) {\r\n console.error('Please provide a valid license key');\r\n }\r\n else if (this.settings.licenseKey === '0000-0000-000-0000') {\r\n console.warn(\"lightGallery: \" + this.settings.licenseKey + \" license key is not valid for production use\");\r\n }\r\n };\r\n LightGallery.prototype.getSlideItem = function (index) {\r\n return $LG(this.getSlideItemId(index));\r\n };\r\n LightGallery.prototype.getSlideItemId = function (index) {\r\n return \"#lg-item-\" + this.lgId + \"-\" + index;\r\n };\r\n LightGallery.prototype.getIdName = function (id) {\r\n return id + \"-\" + this.lgId;\r\n };\r\n LightGallery.prototype.getElementById = function (id) {\r\n return $LG(\"#\" + this.getIdName(id));\r\n };\r\n LightGallery.prototype.manageSingleSlideClassName = function () {\r\n if (this.galleryItems.length < 2) {\r\n this.outer.addClass('lg-single-item');\r\n }\r\n else {\r\n this.outer.removeClass('lg-single-item');\r\n }\r\n };\r\n LightGallery.prototype.buildStructure = function () {\r\n var _this = this;\r\n var container = this.$container && this.$container.get();\r\n if (container) {\r\n return;\r\n }\r\n var controls = '';\r\n var subHtmlCont = '';\r\n // Create controls\r\n if (this.settings.controls) {\r\n controls = \"\\n \";\r\n }\r\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\r\n subHtmlCont =\r\n '
';\r\n }\r\n var addClasses = '';\r\n if (this.settings.allowMediaOverlap) {\r\n // Do not remove space before last single quote\r\n addClasses += 'lg-media-overlap ';\r\n }\r\n var ariaLabelledby = this.settings.ariaLabelledby\r\n ? 'aria-labelledby=\"' + this.settings.ariaLabelledby + '\"'\r\n : '';\r\n var ariaDescribedby = this.settings.ariaDescribedby\r\n ? 'aria-describedby=\"' + this.settings.ariaDescribedby + '\"'\r\n : '';\r\n var containerClassName = \"lg-container \" + this.settings.addClass + \" \" + (document.body !== this.settings.container ? 'lg-inline' : '');\r\n var closeIcon = this.settings.closable && this.settings.showCloseIcon\r\n ? \"\"\r\n : '';\r\n var maximizeIcon = this.settings.showMaximizeIcon\r\n ? \"\"\r\n : '';\r\n var template = \"\\n
\\n
\\n\\n
\\n\\n
\\n
\\n
\\n \" + controls + \"\\n
\\n
\\n \" + maximizeIcon + \"\\n \" + closeIcon + \"\\n
\\n \" + (this.settings.appendSubHtmlTo === '.lg-outer'\r\n ? subHtmlCont\r\n : '') + \"\\n
\\n \" + (this.settings.appendSubHtmlTo === '.lg-sub-html'\r\n ? subHtmlCont\r\n : '') + \"\\n
\\n
\\n
\\n \";\r\n $LG(this.settings.container).append(template);\r\n if (document.body !== this.settings.container) {\r\n $LG(this.settings.container).css('position', 'relative');\r\n }\r\n this.outer = this.getElementById('lg-outer');\r\n this.$lgComponents = this.getElementById('lg-components');\r\n this.$backdrop = this.getElementById('lg-backdrop');\r\n this.$container = this.getElementById('lg-container');\r\n this.$inner = this.getElementById('lg-inner');\r\n this.$content = this.getElementById('lg-content');\r\n this.$toolbar = this.getElementById('lg-toolbar');\r\n this.$backdrop.css('transition-duration', this.settings.backdropDuration + 'ms');\r\n var outerClassNames = this.settings.mode + \" \";\r\n this.manageSingleSlideClassName();\r\n if (this.settings.enableDrag) {\r\n outerClassNames += 'lg-grab ';\r\n }\r\n this.outer.addClass(outerClassNames);\r\n this.$inner.css('transition-timing-function', this.settings.easing);\r\n this.$inner.css('transition-duration', this.settings.speed + 'ms');\r\n if (this.settings.download) {\r\n this.$toolbar.append(\"\");\r\n }\r\n this.counter();\r\n $LG(window).on(\"resize.lg.global\" + this.lgId + \" orientationchange.lg.global\" + this.lgId, function () {\r\n _this.refreshOnResize();\r\n });\r\n this.hideBars();\r\n this.manageCloseGallery();\r\n this.toggleMaximize();\r\n this.initModules();\r\n };\r\n LightGallery.prototype.refreshOnResize = function () {\r\n if (this.lgOpened) {\r\n var currentGalleryItem = this.galleryItems[this.index];\r\n var __slideVideoInfo = currentGalleryItem.__slideVideoInfo;\r\n this.mediaContainerPosition = this.getMediaContainerPosition();\r\n var _a = this.mediaContainerPosition, top_1 = _a.top, bottom = _a.bottom;\r\n this.currentImageSize = utils.getSize(this.items[this.index], this.outer, top_1 + bottom, __slideVideoInfo && this.settings.videoMaxSize);\r\n if (__slideVideoInfo) {\r\n this.resizeVideoSlide(this.index, this.currentImageSize);\r\n }\r\n if (this.zoomFromOrigin && !this.isDummyImageRemoved) {\r\n var imgStyle = this.getDummyImgStyles(this.currentImageSize);\r\n this.outer\r\n .find('.lg-current .lg-dummy-img')\r\n .first()\r\n .attr('style', imgStyle);\r\n }\r\n this.LGel.trigger(lGEvents.containerResize);\r\n }\r\n };\r\n LightGallery.prototype.resizeVideoSlide = function (index, imageSize) {\r\n var lgVideoStyle = this.getVideoContStyle(imageSize);\r\n var currentSlide = this.getSlideItem(index);\r\n currentSlide.find('.lg-video-cont').attr('style', lgVideoStyle);\r\n };\r\n /**\r\n * Update slides dynamically.\r\n * Add, edit or delete slides dynamically when lightGallery is opened.\r\n * Modify the current gallery items and pass it via updateSlides method\r\n * @note\r\n * - Do not mutate existing lightGallery items directly.\r\n * - Always pass new list of gallery items\r\n * - You need to take care of thumbnails outside the gallery if any\r\n * - user this method only if you want to update slides when the gallery is opened. Otherwise, use `refresh()` method.\r\n * @param items Gallery items\r\n * @param index After the update operation, which slide gallery should navigate to\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n *\r\n * // Adding slides dynamically\r\n * let galleryItems = [\r\n * // Access existing lightGallery items\r\n * // galleryItems are automatically generated internally from the gallery HTML markup\r\n * // or directly from galleryItems when dynamic gallery is used\r\n * ...plugin.galleryItems,\r\n * ...[\r\n * {\r\n * src: 'img/img-1.png',\r\n * thumb: 'img/thumb1.png',\r\n * },\r\n * ],\r\n * ];\r\n * plugin.updateSlides(\r\n * galleryItems,\r\n * plugin.index,\r\n * );\r\n *\r\n *\r\n * // Remove slides dynamically\r\n * galleryItems = JSON.parse(\r\n * JSON.stringify(updateSlideInstance.galleryItems),\r\n * );\r\n * galleryItems.shift();\r\n * updateSlideInstance.updateSlides(galleryItems, 1);\r\n * @see Demo\r\n */\r\n LightGallery.prototype.updateSlides = function (items, index) {\r\n if (this.index > items.length - 1) {\r\n this.index = items.length - 1;\r\n }\r\n if (items.length === 1) {\r\n this.index = 0;\r\n }\r\n if (!items.length) {\r\n this.closeGallery();\r\n return;\r\n }\r\n var currentSrc = this.galleryItems[index].src;\r\n this.galleryItems = items;\r\n this.updateControls();\r\n this.$inner.empty();\r\n this.currentItemsInDom = [];\r\n var _index = 0;\r\n // Find the current index based on source value of the slide\r\n this.galleryItems.some(function (galleryItem, itemIndex) {\r\n if (galleryItem.src === currentSrc) {\r\n _index = itemIndex;\r\n return true;\r\n }\r\n return false;\r\n });\r\n this.currentItemsInDom = this.organizeSlideItems(_index, -1);\r\n this.loadContent(_index, true);\r\n this.getSlideItem(_index).addClass('lg-current');\r\n this.index = _index;\r\n this.updateCurrentCounter(_index);\r\n this.LGel.trigger(lGEvents.updateSlides);\r\n };\r\n // Get gallery items based on multiple conditions\r\n LightGallery.prototype.getItems = function () {\r\n // Gallery items\r\n this.items = [];\r\n if (!this.settings.dynamic) {\r\n if (this.settings.selector === 'this') {\r\n this.items.push(this.el);\r\n }\r\n else if (this.settings.selector) {\r\n if (typeof this.settings.selector === 'string') {\r\n if (this.settings.selectWithin) {\r\n var selectWithin = $LG(this.settings.selectWithin);\r\n this.items = selectWithin\r\n .find(this.settings.selector)\r\n .get();\r\n }\r\n else {\r\n this.items = this.el.querySelectorAll(this.settings.selector);\r\n }\r\n }\r\n else {\r\n this.items = this.settings.selector;\r\n }\r\n }\r\n else {\r\n this.items = this.el.children;\r\n }\r\n return utils.getDynamicOptions(this.items, this.settings.extraProps, this.settings.getCaptionFromTitleOrAlt, this.settings.exThumbImage);\r\n }\r\n else {\r\n return this.settings.dynamicEl || [];\r\n }\r\n };\r\n LightGallery.prototype.shouldHideScrollbar = function () {\r\n return (this.settings.hideScrollbar &&\r\n document.body === this.settings.container);\r\n };\r\n LightGallery.prototype.hideScrollbar = function () {\r\n if (!this.shouldHideScrollbar()) {\r\n return;\r\n }\r\n this.bodyPaddingRight = parseFloat($LG('body').style().paddingRight);\r\n var bodyRect = document.documentElement.getBoundingClientRect();\r\n var scrollbarWidth = window.innerWidth - bodyRect.width;\r\n $LG(document.body).css('padding-right', scrollbarWidth + this.bodyPaddingRight + 'px');\r\n $LG(document.body).addClass('lg-overlay-open');\r\n };\r\n LightGallery.prototype.resetScrollBar = function () {\r\n if (!this.shouldHideScrollbar()) {\r\n return;\r\n }\r\n $LG(document.body).css('padding-right', this.bodyPaddingRight + 'px');\r\n $LG(document.body).removeClass('lg-overlay-open');\r\n };\r\n /**\r\n * Open lightGallery.\r\n * Open gallery with specific slide by passing index of the slide as parameter.\r\n * @category lGPublicMethods\r\n * @param {Number} index - index of the slide\r\n * @param {HTMLElement} element - Which image lightGallery should zoom from\r\n *\r\n * @example\r\n * const $dynamicGallery = document.getElementById('dynamic-gallery-demo');\r\n * const dynamicGallery = lightGallery($dynamicGallery, {\r\n * dynamic: true,\r\n * dynamicEl: [\r\n * {\r\n * src: 'img/1.jpg',\r\n * thumb: 'img/thumb-1.jpg',\r\n * subHtml: '

Image 1 title

Image 1 descriptions.

',\r\n * },\r\n * ...\r\n * ],\r\n * });\r\n * $dynamicGallery.addEventListener('click', function () {\r\n * // Starts with third item.(Optional).\r\n * // This is useful if you want use dynamic mode with\r\n * // custom thumbnails (thumbnails outside gallery),\r\n * dynamicGallery.openGallery(2);\r\n * });\r\n *\r\n */\r\n LightGallery.prototype.openGallery = function (index, element) {\r\n var _this = this;\r\n if (index === void 0) { index = this.settings.index; }\r\n // prevent accidental double execution\r\n if (this.lgOpened)\r\n return;\r\n this.lgOpened = true;\r\n this.outer.removeClass('lg-hide-items');\r\n this.hideScrollbar();\r\n // Add display block, but still has opacity 0\r\n this.$container.addClass('lg-show');\r\n var itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(index, index);\r\n this.currentItemsInDom = itemsToBeInsertedToDom;\r\n var items = '';\r\n itemsToBeInsertedToDom.forEach(function (item) {\r\n items = items + (\"
\");\r\n });\r\n this.$inner.append(items);\r\n this.addHtml(index);\r\n var transform = '';\r\n this.mediaContainerPosition = this.getMediaContainerPosition();\r\n var _a = this.mediaContainerPosition, top = _a.top, bottom = _a.bottom;\r\n if (!this.settings.allowMediaOverlap) {\r\n this.setMediaContainerPosition(top, bottom);\r\n }\r\n var __slideVideoInfo = this.galleryItems[index].__slideVideoInfo;\r\n if (this.zoomFromOrigin && element) {\r\n this.currentImageSize = utils.getSize(element, this.outer, top + bottom, __slideVideoInfo && this.settings.videoMaxSize);\r\n transform = utils.getTransform(element, this.outer, top, bottom, this.currentImageSize);\r\n }\r\n if (!this.zoomFromOrigin || !transform) {\r\n this.outer.addClass(this.settings.startClass);\r\n this.getSlideItem(index).removeClass('lg-complete');\r\n }\r\n var timeout = this.settings.zoomFromOrigin\r\n ? 100\r\n : this.settings.backdropDuration;\r\n setTimeout(function () {\r\n _this.outer.addClass('lg-components-open');\r\n }, timeout);\r\n this.index = index;\r\n this.LGel.trigger(lGEvents.beforeOpen);\r\n // add class lg-current to remove initial transition\r\n this.getSlideItem(index).addClass('lg-current');\r\n this.lGalleryOn = false;\r\n // Store the current scroll top value to scroll back after closing the gallery..\r\n this.prevScrollTop = $LG(window).scrollTop();\r\n setTimeout(function () {\r\n // Need to check both zoomFromOrigin and transform values as we need to set set the\r\n // default opening animation if user missed to add the lg-size attribute\r\n if (_this.zoomFromOrigin && transform) {\r\n var currentSlide_1 = _this.getSlideItem(index);\r\n currentSlide_1.css('transform', transform);\r\n setTimeout(function () {\r\n currentSlide_1\r\n .addClass('lg-start-progress lg-start-end-progress')\r\n .css('transition-duration', _this.settings.startAnimationDuration + 'ms');\r\n _this.outer.addClass('lg-zoom-from-image');\r\n });\r\n setTimeout(function () {\r\n currentSlide_1.css('transform', 'translate3d(0, 0, 0)');\r\n }, 100);\r\n }\r\n setTimeout(function () {\r\n _this.$backdrop.addClass('in');\r\n _this.$container.addClass('lg-show-in');\r\n }, 10);\r\n setTimeout(function () {\r\n if (_this.settings.trapFocus &&\r\n document.body === _this.settings.container) {\r\n _this.trapFocus();\r\n }\r\n }, _this.settings.backdropDuration + 50);\r\n // lg-visible class resets gallery opacity to 1\r\n if (!_this.zoomFromOrigin || !transform) {\r\n setTimeout(function () {\r\n _this.outer.addClass('lg-visible');\r\n }, _this.settings.backdropDuration);\r\n }\r\n // initiate slide function\r\n _this.slide(index, false, false, false);\r\n _this.LGel.trigger(lGEvents.afterOpen);\r\n });\r\n if (document.body === this.settings.container) {\r\n $LG('html').addClass('lg-on');\r\n }\r\n };\r\n /**\r\n * Note - Changing the position of the media on every slide transition creates a flickering effect.\r\n * Therefore, The height of the caption is calculated dynamically, only once based on the first slide caption.\r\n * if you have dynamic captions for each media,\r\n * you can provide an appropriate height for the captions via allowMediaOverlap option\r\n */\r\n LightGallery.prototype.getMediaContainerPosition = function () {\r\n if (this.settings.allowMediaOverlap) {\r\n return {\r\n top: 0,\r\n bottom: 0,\r\n };\r\n }\r\n var top = this.$toolbar.get().clientHeight || 0;\r\n var subHtml = this.outer.find('.lg-components .lg-sub-html').get();\r\n var captionHeight = this.settings.defaultCaptionHeight ||\r\n (subHtml && subHtml.clientHeight) ||\r\n 0;\r\n var thumbContainer = this.outer.find('.lg-thumb-outer').get();\r\n var thumbHeight = thumbContainer ? thumbContainer.clientHeight : 0;\r\n var bottom = thumbHeight + captionHeight;\r\n return {\r\n top: top,\r\n bottom: bottom,\r\n };\r\n };\r\n LightGallery.prototype.setMediaContainerPosition = function (top, bottom) {\r\n if (top === void 0) { top = 0; }\r\n if (bottom === void 0) { bottom = 0; }\r\n this.$content.css('top', top + 'px').css('bottom', bottom + 'px');\r\n };\r\n LightGallery.prototype.hideBars = function () {\r\n var _this = this;\r\n // Hide controllers if mouse doesn't move for some period\r\n setTimeout(function () {\r\n _this.outer.removeClass('lg-hide-items');\r\n if (_this.settings.hideBarsDelay > 0) {\r\n _this.outer.on('mousemove.lg click.lg touchstart.lg', function () {\r\n _this.outer.removeClass('lg-hide-items');\r\n clearTimeout(_this.hideBarTimeout);\r\n // Timeout will be cleared on each slide movement also\r\n _this.hideBarTimeout = setTimeout(function () {\r\n _this.outer.addClass('lg-hide-items');\r\n }, _this.settings.hideBarsDelay);\r\n });\r\n _this.outer.trigger('mousemove.lg');\r\n }\r\n }, this.settings.showBarsAfter);\r\n };\r\n LightGallery.prototype.initPictureFill = function ($img) {\r\n if (this.settings.supportLegacyBrowser) {\r\n try {\r\n picturefill({\r\n elements: [$img.get()],\r\n });\r\n }\r\n catch (e) {\r\n console.warn('lightGallery :- If you want srcset or picture tag to be supported for older browser please include picturefil javascript library in your document.');\r\n }\r\n }\r\n };\r\n /**\r\n * @desc Create image counter\r\n * Ex: 1/10\r\n */\r\n LightGallery.prototype.counter = function () {\r\n if (this.settings.counter) {\r\n var counterHtml = \"
\\n \" + (this.index + 1) + \" /\\n \" + this.galleryItems.length + \"
\";\r\n this.outer.find(this.settings.appendCounterTo).append(counterHtml);\r\n }\r\n };\r\n /**\r\n * @desc add sub-html into the slide\r\n * @param {Number} index - index of the slide\r\n */\r\n LightGallery.prototype.addHtml = function (index) {\r\n var subHtml;\r\n var subHtmlUrl;\r\n if (this.galleryItems[index].subHtmlUrl) {\r\n subHtmlUrl = this.galleryItems[index].subHtmlUrl;\r\n }\r\n else {\r\n subHtml = this.galleryItems[index].subHtml;\r\n }\r\n if (!subHtmlUrl) {\r\n if (subHtml) {\r\n // get first letter of sub-html\r\n // if first letter starts with . or # get the html form the jQuery object\r\n var fL = subHtml.substring(0, 1);\r\n if (fL === '.' || fL === '#') {\r\n if (this.settings.subHtmlSelectorRelative &&\r\n !this.settings.dynamic) {\r\n subHtml = $LG(this.items)\r\n .eq(index)\r\n .find(subHtml)\r\n .first()\r\n .html();\r\n }\r\n else {\r\n subHtml = $LG(subHtml).first().html();\r\n }\r\n }\r\n }\r\n else {\r\n subHtml = '';\r\n }\r\n }\r\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\r\n if (subHtmlUrl) {\r\n this.outer.find('.lg-sub-html').load(subHtmlUrl);\r\n }\r\n else {\r\n this.outer.find('.lg-sub-html').html(subHtml);\r\n }\r\n }\r\n else {\r\n var currentSlide = $LG(this.getSlideItemId(index));\r\n if (subHtmlUrl) {\r\n currentSlide.load(subHtmlUrl);\r\n }\r\n else {\r\n currentSlide.append(\"
\" + subHtml + \"
\");\r\n }\r\n }\r\n // Add lg-empty-html class if title doesn't exist\r\n if (typeof subHtml !== 'undefined' && subHtml !== null) {\r\n if (subHtml === '') {\r\n this.outer\r\n .find(this.settings.appendSubHtmlTo)\r\n .addClass('lg-empty-html');\r\n }\r\n else {\r\n this.outer\r\n .find(this.settings.appendSubHtmlTo)\r\n .removeClass('lg-empty-html');\r\n }\r\n }\r\n this.LGel.trigger(lGEvents.afterAppendSubHtml, {\r\n index: index,\r\n });\r\n };\r\n /**\r\n * @desc Preload slides\r\n * @param {Number} index - index of the slide\r\n * @todo preload not working for the first slide, Also, should work for the first and last slide as well\r\n */\r\n LightGallery.prototype.preload = function (index) {\r\n for (var i = 1; i <= this.settings.preload; i++) {\r\n if (i >= this.galleryItems.length - index) {\r\n break;\r\n }\r\n this.loadContent(index + i, false);\r\n }\r\n for (var j = 1; j <= this.settings.preload; j++) {\r\n if (index - j < 0) {\r\n break;\r\n }\r\n this.loadContent(index - j, false);\r\n }\r\n };\r\n LightGallery.prototype.getDummyImgStyles = function (imageSize) {\r\n if (!imageSize)\r\n return '';\r\n return \"width:\" + imageSize.width + \"px;\\n margin-left: -\" + imageSize.width / 2 + \"px;\\n margin-top: -\" + imageSize.height / 2 + \"px;\\n height:\" + imageSize.height + \"px\";\r\n };\r\n LightGallery.prototype.getVideoContStyle = function (imageSize) {\r\n if (!imageSize)\r\n return '';\r\n return \"width:\" + imageSize.width + \"px;\\n height:\" + imageSize.height + \"px\";\r\n };\r\n LightGallery.prototype.getDummyImageContent = function ($currentSlide, index, alt) {\r\n var $currentItem;\r\n if (!this.settings.dynamic) {\r\n $currentItem = $LG(this.items).eq(index);\r\n }\r\n if ($currentItem) {\r\n var _dummyImgSrc = void 0;\r\n if (!this.settings.exThumbImage) {\r\n _dummyImgSrc = $currentItem.find('img').first().attr('src');\r\n }\r\n else {\r\n _dummyImgSrc = $currentItem.attr(this.settings.exThumbImage);\r\n }\r\n if (!_dummyImgSrc)\r\n return '';\r\n var imgStyle = this.getDummyImgStyles(this.currentImageSize);\r\n var dummyImgContent = \"\";\r\n $currentSlide.addClass('lg-first-slide');\r\n this.outer.addClass('lg-first-slide-loading');\r\n return dummyImgContent;\r\n }\r\n return '';\r\n };\r\n LightGallery.prototype.setImgMarkup = function (src, $currentSlide, index) {\r\n var currentGalleryItem = this.galleryItems[index];\r\n var alt = currentGalleryItem.alt, srcset = currentGalleryItem.srcset, sizes = currentGalleryItem.sizes, sources = currentGalleryItem.sources;\r\n // Use the thumbnail as dummy image which will be resized to actual image size and\r\n // displayed on top of actual image\r\n var imgContent = '';\r\n var altAttr = alt ? 'alt=\"' + alt + '\"' : '';\r\n if (this.isFirstSlideWithZoomAnimation()) {\r\n imgContent = this.getDummyImageContent($currentSlide, index, altAttr);\r\n }\r\n else {\r\n imgContent = utils.getImgMarkup(index, src, altAttr, srcset, sizes, sources);\r\n }\r\n var imgMarkup = \" \" + imgContent + \"\";\r\n $currentSlide.prepend(imgMarkup);\r\n };\r\n LightGallery.prototype.onSlideObjectLoad = function ($slide, isHTML5VideoWithoutPoster, onLoad, onError) {\r\n var mediaObject = $slide.find('.lg-object').first();\r\n if (utils.isImageLoaded(mediaObject.get()) ||\r\n isHTML5VideoWithoutPoster) {\r\n onLoad();\r\n }\r\n else {\r\n mediaObject.on('load.lg error.lg', function () {\r\n onLoad && onLoad();\r\n });\r\n mediaObject.on('error.lg', function () {\r\n onError && onError();\r\n });\r\n }\r\n };\r\n /**\r\n *\r\n * @param $el Current slide item\r\n * @param index\r\n * @param delay Delay is 0 except first time\r\n * @param speed Speed is same as delay, except it is 0 if gallery is opened via hash plugin\r\n * @param isFirstSlide\r\n */\r\n LightGallery.prototype.onLgObjectLoad = function (currentSlide, index, delay, speed, isFirstSlide, isHTML5VideoWithoutPoster) {\r\n var _this = this;\r\n this.onSlideObjectLoad(currentSlide, isHTML5VideoWithoutPoster, function () {\r\n _this.triggerSlideItemLoad(currentSlide, index, delay, speed, isFirstSlide);\r\n }, function () {\r\n currentSlide.addClass('lg-complete lg-complete_');\r\n currentSlide.html('' +\r\n _this.settings.strings['mediaLoadingFailed'] +\r\n '');\r\n });\r\n };\r\n LightGallery.prototype.triggerSlideItemLoad = function ($currentSlide, index, delay, speed, isFirstSlide) {\r\n var _this = this;\r\n var currentGalleryItem = this.galleryItems[index];\r\n // Adding delay for video slides without poster for better performance and user experience\r\n // Videos should start playing once once the gallery is completely loaded\r\n var _speed = isFirstSlide &&\r\n this.getSlideType(currentGalleryItem) === 'video' &&\r\n !currentGalleryItem.poster\r\n ? speed\r\n : 0;\r\n setTimeout(function () {\r\n $currentSlide.addClass('lg-complete lg-complete_');\r\n _this.LGel.trigger(lGEvents.slideItemLoad, {\r\n index: index,\r\n delay: delay || 0,\r\n isFirstSlide: isFirstSlide,\r\n });\r\n }, _speed);\r\n };\r\n LightGallery.prototype.isFirstSlideWithZoomAnimation = function () {\r\n return !!(!this.lGalleryOn &&\r\n this.zoomFromOrigin &&\r\n this.currentImageSize);\r\n };\r\n // Add video slideInfo\r\n LightGallery.prototype.addSlideVideoInfo = function (items) {\r\n var _this = this;\r\n items.forEach(function (element, index) {\r\n element.__slideVideoInfo = utils.isVideo(element.src, !!element.video, index);\r\n if (element.__slideVideoInfo &&\r\n _this.settings.loadYouTubePoster &&\r\n !element.poster &&\r\n element.__slideVideoInfo.youtube) {\r\n element.poster = \"//img.youtube.com/vi/\" + element.__slideVideoInfo.youtube[1] + \"/maxresdefault.jpg\";\r\n }\r\n });\r\n };\r\n /**\r\n * Load slide content into slide.\r\n * This is used to load content into slides that is not visible too\r\n * @param {Number} index - index of the slide.\r\n * @param {Boolean} rec - if true call loadcontent() function again.\r\n */\r\n LightGallery.prototype.loadContent = function (index, rec) {\r\n var _this = this;\r\n var currentGalleryItem = this.galleryItems[index];\r\n var $currentSlide = $LG(this.getSlideItemId(index));\r\n var poster = currentGalleryItem.poster, srcset = currentGalleryItem.srcset, sizes = currentGalleryItem.sizes, sources = currentGalleryItem.sources;\r\n var src = currentGalleryItem.src;\r\n var video = currentGalleryItem.video;\r\n var _html5Video = video && typeof video === 'string' ? JSON.parse(video) : video;\r\n if (currentGalleryItem.responsive) {\r\n var srcDyItms = currentGalleryItem.responsive.split(',');\r\n src = utils.getResponsiveSrc(srcDyItms) || src;\r\n }\r\n var videoInfo = currentGalleryItem.__slideVideoInfo;\r\n var lgVideoStyle = '';\r\n var iframe = !!currentGalleryItem.iframe;\r\n var isFirstSlide = !this.lGalleryOn;\r\n // delay for adding complete class. it is 0 except first time.\r\n var delay = 0;\r\n if (isFirstSlide) {\r\n if (this.zoomFromOrigin && this.currentImageSize) {\r\n delay = this.settings.startAnimationDuration + 10;\r\n }\r\n else {\r\n delay = this.settings.backdropDuration + 10;\r\n }\r\n }\r\n if (!$currentSlide.hasClass('lg-loaded')) {\r\n if (videoInfo) {\r\n var _a = this.mediaContainerPosition, top_2 = _a.top, bottom = _a.bottom;\r\n var videoSize = utils.getSize(this.items[index], this.outer, top_2 + bottom, videoInfo && this.settings.videoMaxSize);\r\n lgVideoStyle = this.getVideoContStyle(videoSize);\r\n }\r\n if (iframe) {\r\n var markup = utils.getIframeMarkup(this.settings.iframeWidth, this.settings.iframeHeight, this.settings.iframeMaxWidth, this.settings.iframeMaxHeight, src, currentGalleryItem.iframeTitle);\r\n $currentSlide.prepend(markup);\r\n }\r\n else if (poster) {\r\n var dummyImg = '';\r\n var hasStartAnimation = isFirstSlide &&\r\n this.zoomFromOrigin &&\r\n this.currentImageSize;\r\n if (hasStartAnimation) {\r\n dummyImg = this.getDummyImageContent($currentSlide, index, '');\r\n }\r\n var markup = utils.getVideoPosterMarkup(poster, dummyImg || '', lgVideoStyle, this.settings.strings['playVideo'], videoInfo);\r\n $currentSlide.prepend(markup);\r\n }\r\n else if (videoInfo) {\r\n var markup = \"
\";\r\n $currentSlide.prepend(markup);\r\n }\r\n else {\r\n this.setImgMarkup(src, $currentSlide, index);\r\n if (srcset || sources) {\r\n var $img = $currentSlide.find('.lg-object');\r\n this.initPictureFill($img);\r\n }\r\n }\r\n if (poster || videoInfo) {\r\n this.LGel.trigger(lGEvents.hasVideo, {\r\n index: index,\r\n src: src,\r\n html5Video: _html5Video,\r\n hasPoster: !!poster,\r\n });\r\n }\r\n this.LGel.trigger(lGEvents.afterAppendSlide, { index: index });\r\n if (this.lGalleryOn &&\r\n this.settings.appendSubHtmlTo === '.lg-item') {\r\n this.addHtml(index);\r\n }\r\n }\r\n // For first time add some delay for displaying the start animation.\r\n var _speed = 0;\r\n // Do not change the delay value because it is required for zoom plugin.\r\n // If gallery opened from direct url (hash) speed value should be 0\r\n if (delay && !$LG(document.body).hasClass('lg-from-hash')) {\r\n _speed = delay;\r\n }\r\n // Only for first slide and zoomFromOrigin is enabled\r\n if (this.isFirstSlideWithZoomAnimation()) {\r\n setTimeout(function () {\r\n $currentSlide\r\n .removeClass('lg-start-end-progress lg-start-progress')\r\n .removeAttr('style');\r\n }, this.settings.startAnimationDuration + 100);\r\n if (!$currentSlide.hasClass('lg-loaded')) {\r\n setTimeout(function () {\r\n if (_this.getSlideType(currentGalleryItem) === 'image') {\r\n var alt = currentGalleryItem.alt;\r\n var altAttr = alt ? 'alt=\"' + alt + '\"' : '';\r\n $currentSlide\r\n .find('.lg-img-wrap')\r\n .append(utils.getImgMarkup(index, src, altAttr, srcset, sizes, currentGalleryItem.sources));\r\n if (srcset || sources) {\r\n var $img = $currentSlide.find('.lg-object');\r\n _this.initPictureFill($img);\r\n }\r\n }\r\n if (_this.getSlideType(currentGalleryItem) === 'image' ||\r\n (_this.getSlideType(currentGalleryItem) === 'video' &&\r\n poster)) {\r\n _this.onLgObjectLoad($currentSlide, index, delay, _speed, true, false);\r\n // load remaining slides once the slide is completely loaded\r\n _this.onSlideObjectLoad($currentSlide, !!(videoInfo && videoInfo.html5 && !poster), function () {\r\n _this.loadContentOnFirstSlideLoad(index, $currentSlide, _speed);\r\n }, function () {\r\n _this.loadContentOnFirstSlideLoad(index, $currentSlide, _speed);\r\n });\r\n }\r\n }, this.settings.startAnimationDuration + 100);\r\n }\r\n }\r\n // SLide content has been added to dom\r\n $currentSlide.addClass('lg-loaded');\r\n if (!this.isFirstSlideWithZoomAnimation() ||\r\n (this.getSlideType(currentGalleryItem) === 'video' && !poster)) {\r\n this.onLgObjectLoad($currentSlide, index, delay, _speed, isFirstSlide, !!(videoInfo && videoInfo.html5 && !poster));\r\n }\r\n // When gallery is opened once content is loaded (second time) need to add lg-complete class for css styling\r\n if ((!this.zoomFromOrigin || !this.currentImageSize) &&\r\n $currentSlide.hasClass('lg-complete_') &&\r\n !this.lGalleryOn) {\r\n setTimeout(function () {\r\n $currentSlide.addClass('lg-complete');\r\n }, this.settings.backdropDuration);\r\n }\r\n // Content loaded\r\n // Need to set lGalleryOn before calling preload function\r\n this.lGalleryOn = true;\r\n if (rec === true) {\r\n if (!$currentSlide.hasClass('lg-complete_')) {\r\n $currentSlide\r\n .find('.lg-object')\r\n .first()\r\n .on('load.lg error.lg', function () {\r\n _this.preload(index);\r\n });\r\n }\r\n else {\r\n this.preload(index);\r\n }\r\n }\r\n };\r\n /**\r\n * @desc Remove dummy image content and load next slides\r\n * Called only for the first time if zoomFromOrigin animation is enabled\r\n * @param index\r\n * @param $currentSlide\r\n * @param speed\r\n */\r\n LightGallery.prototype.loadContentOnFirstSlideLoad = function (index, $currentSlide, speed) {\r\n var _this = this;\r\n setTimeout(function () {\r\n $currentSlide.find('.lg-dummy-img').remove();\r\n $currentSlide.removeClass('lg-first-slide');\r\n _this.outer.removeClass('lg-first-slide-loading');\r\n _this.isDummyImageRemoved = true;\r\n _this.preload(index);\r\n }, speed + 300);\r\n };\r\n LightGallery.prototype.getItemsToBeInsertedToDom = function (index, prevIndex, numberOfItems) {\r\n var _this = this;\r\n if (numberOfItems === void 0) { numberOfItems = 0; }\r\n var itemsToBeInsertedToDom = [];\r\n // Minimum 2 items should be there\r\n var possibleNumberOfItems = Math.max(numberOfItems, 3);\r\n possibleNumberOfItems = Math.min(possibleNumberOfItems, this.galleryItems.length);\r\n var prevIndexItem = \"lg-item-\" + this.lgId + \"-\" + prevIndex;\r\n if (this.galleryItems.length <= 3) {\r\n this.galleryItems.forEach(function (_element, index) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + _this.lgId + \"-\" + index);\r\n });\r\n return itemsToBeInsertedToDom;\r\n }\r\n if (index < (this.galleryItems.length - 1) / 2) {\r\n for (var idx = index; idx > index - possibleNumberOfItems / 2 && idx >= 0; idx--) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + idx);\r\n }\r\n var numberOfExistingItems = itemsToBeInsertedToDom.length;\r\n for (var idx = 0; idx < possibleNumberOfItems - numberOfExistingItems; idx++) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + (index + idx + 1));\r\n }\r\n }\r\n else {\r\n for (var idx = index; idx <= this.galleryItems.length - 1 &&\r\n idx < index + possibleNumberOfItems / 2; idx++) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + idx);\r\n }\r\n var numberOfExistingItems = itemsToBeInsertedToDom.length;\r\n for (var idx = 0; idx < possibleNumberOfItems - numberOfExistingItems; idx++) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + (index - idx - 1));\r\n }\r\n }\r\n if (this.settings.loop) {\r\n if (index === this.galleryItems.length - 1) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + 0);\r\n }\r\n else if (index === 0) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + (this.galleryItems.length - 1));\r\n }\r\n }\r\n if (itemsToBeInsertedToDom.indexOf(prevIndexItem) === -1) {\r\n itemsToBeInsertedToDom.push(\"lg-item-\" + this.lgId + \"-\" + prevIndex);\r\n }\r\n return itemsToBeInsertedToDom;\r\n };\r\n LightGallery.prototype.organizeSlideItems = function (index, prevIndex) {\r\n var _this = this;\r\n var itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(index, prevIndex, this.settings.numberOfSlideItemsInDom);\r\n itemsToBeInsertedToDom.forEach(function (item) {\r\n if (_this.currentItemsInDom.indexOf(item) === -1) {\r\n _this.$inner.append(\"
\");\r\n }\r\n });\r\n this.currentItemsInDom.forEach(function (item) {\r\n if (itemsToBeInsertedToDom.indexOf(item) === -1) {\r\n $LG(\"#\" + item).remove();\r\n }\r\n });\r\n return itemsToBeInsertedToDom;\r\n };\r\n /**\r\n * Get previous index of the slide\r\n */\r\n LightGallery.prototype.getPreviousSlideIndex = function () {\r\n var prevIndex = 0;\r\n try {\r\n var currentItemId = this.outer\r\n .find('.lg-current')\r\n .first()\r\n .attr('id');\r\n prevIndex = parseInt(currentItemId.split('-')[3]) || 0;\r\n }\r\n catch (error) {\r\n prevIndex = 0;\r\n }\r\n return prevIndex;\r\n };\r\n LightGallery.prototype.setDownloadValue = function (index) {\r\n if (this.settings.download) {\r\n var currentGalleryItem = this.galleryItems[index];\r\n var hideDownloadBtn = currentGalleryItem.downloadUrl === false ||\r\n currentGalleryItem.downloadUrl === 'false';\r\n if (hideDownloadBtn) {\r\n this.outer.addClass('lg-hide-download');\r\n }\r\n else {\r\n var $download = this.getElementById('lg-download');\r\n this.outer.removeClass('lg-hide-download');\r\n $download.attr('href', currentGalleryItem.downloadUrl ||\r\n currentGalleryItem.src);\r\n if (currentGalleryItem.download) {\r\n $download.attr('download', currentGalleryItem.download);\r\n }\r\n }\r\n }\r\n };\r\n LightGallery.prototype.makeSlideAnimation = function (direction, currentSlideItem, previousSlideItem) {\r\n var _this = this;\r\n if (this.lGalleryOn) {\r\n previousSlideItem.addClass('lg-slide-progress');\r\n }\r\n setTimeout(function () {\r\n // remove all transitions\r\n _this.outer.addClass('lg-no-trans');\r\n _this.outer\r\n .find('.lg-item')\r\n .removeClass('lg-prev-slide lg-next-slide');\r\n if (direction === 'prev') {\r\n //prevslide\r\n currentSlideItem.addClass('lg-prev-slide');\r\n previousSlideItem.addClass('lg-next-slide');\r\n }\r\n else {\r\n // next slide\r\n currentSlideItem.addClass('lg-next-slide');\r\n previousSlideItem.addClass('lg-prev-slide');\r\n }\r\n // give 50 ms for browser to add/remove class\r\n setTimeout(function () {\r\n _this.outer.find('.lg-item').removeClass('lg-current');\r\n currentSlideItem.addClass('lg-current');\r\n // reset all transitions\r\n _this.outer.removeClass('lg-no-trans');\r\n }, 50);\r\n }, this.lGalleryOn ? this.settings.slideDelay : 0);\r\n };\r\n /**\r\n * Goto a specific slide.\r\n * @param {Number} index - index of the slide\r\n * @param {Boolean} fromTouch - true if slide function called via touch event or mouse drag\r\n * @param {Boolean} fromThumb - true if slide function called via thumbnail click\r\n * @param {String} direction - Direction of the slide(next/prev)\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * // to go to 3rd slide\r\n * plugin.slide(2);\r\n *\r\n */\r\n LightGallery.prototype.slide = function (index, fromTouch, fromThumb, direction) {\r\n var _this = this;\r\n var prevIndex = this.getPreviousSlideIndex();\r\n this.currentItemsInDom = this.organizeSlideItems(index, prevIndex);\r\n // Prevent multiple call, Required for hsh plugin\r\n if (this.lGalleryOn && prevIndex === index) {\r\n return;\r\n }\r\n var numberOfGalleryItems = this.galleryItems.length;\r\n if (!this.lgBusy) {\r\n if (this.settings.counter) {\r\n this.updateCurrentCounter(index);\r\n }\r\n var currentSlideItem = this.getSlideItem(index);\r\n var previousSlideItem_1 = this.getSlideItem(prevIndex);\r\n var currentGalleryItem = this.galleryItems[index];\r\n var videoInfo = currentGalleryItem.__slideVideoInfo;\r\n this.outer.attr('data-lg-slide-type', this.getSlideType(currentGalleryItem));\r\n this.setDownloadValue(index);\r\n if (videoInfo) {\r\n var _a = this.mediaContainerPosition, top_3 = _a.top, bottom = _a.bottom;\r\n var videoSize = utils.getSize(this.items[index], this.outer, top_3 + bottom, videoInfo && this.settings.videoMaxSize);\r\n this.resizeVideoSlide(index, videoSize);\r\n }\r\n this.LGel.trigger(lGEvents.beforeSlide, {\r\n prevIndex: prevIndex,\r\n index: index,\r\n fromTouch: !!fromTouch,\r\n fromThumb: !!fromThumb,\r\n });\r\n this.lgBusy = true;\r\n clearTimeout(this.hideBarTimeout);\r\n this.arrowDisable(index);\r\n if (!direction) {\r\n if (index < prevIndex) {\r\n direction = 'prev';\r\n }\r\n else if (index > prevIndex) {\r\n direction = 'next';\r\n }\r\n }\r\n if (!fromTouch) {\r\n this.makeSlideAnimation(direction, currentSlideItem, previousSlideItem_1);\r\n }\r\n else {\r\n this.outer\r\n .find('.lg-item')\r\n .removeClass('lg-prev-slide lg-current lg-next-slide');\r\n var touchPrev = void 0;\r\n var touchNext = void 0;\r\n if (numberOfGalleryItems > 2) {\r\n touchPrev = index - 1;\r\n touchNext = index + 1;\r\n if (index === 0 && prevIndex === numberOfGalleryItems - 1) {\r\n // next slide\r\n touchNext = 0;\r\n touchPrev = numberOfGalleryItems - 1;\r\n }\r\n else if (index === numberOfGalleryItems - 1 &&\r\n prevIndex === 0) {\r\n // prev slide\r\n touchNext = 0;\r\n touchPrev = numberOfGalleryItems - 1;\r\n }\r\n }\r\n else {\r\n touchPrev = 0;\r\n touchNext = 1;\r\n }\r\n if (direction === 'prev') {\r\n this.getSlideItem(touchNext).addClass('lg-next-slide');\r\n }\r\n else {\r\n this.getSlideItem(touchPrev).addClass('lg-prev-slide');\r\n }\r\n currentSlideItem.addClass('lg-current');\r\n }\r\n // Do not put load content in set timeout as it needs to load immediately when the gallery is opened\r\n if (!this.lGalleryOn) {\r\n this.loadContent(index, true);\r\n }\r\n else {\r\n setTimeout(function () {\r\n _this.loadContent(index, true);\r\n // Add title if this.settings.appendSubHtmlTo === lg-sub-html\r\n if (_this.settings.appendSubHtmlTo !== '.lg-item') {\r\n _this.addHtml(index);\r\n }\r\n }, this.settings.speed + 50 + (fromTouch ? 0 : this.settings.slideDelay));\r\n }\r\n setTimeout(function () {\r\n _this.lgBusy = false;\r\n previousSlideItem_1.removeClass('lg-slide-progress');\r\n _this.LGel.trigger(lGEvents.afterSlide, {\r\n prevIndex: prevIndex,\r\n index: index,\r\n fromTouch: fromTouch,\r\n fromThumb: fromThumb,\r\n });\r\n }, (this.lGalleryOn ? this.settings.speed + 100 : 100) + (fromTouch ? 0 : this.settings.slideDelay));\r\n }\r\n this.index = index;\r\n };\r\n LightGallery.prototype.updateCurrentCounter = function (index) {\r\n this.getElementById('lg-counter-current').html(index + 1 + '');\r\n };\r\n LightGallery.prototype.updateCounterTotal = function () {\r\n this.getElementById('lg-counter-all').html(this.galleryItems.length + '');\r\n };\r\n LightGallery.prototype.getSlideType = function (item) {\r\n if (item.__slideVideoInfo) {\r\n return 'video';\r\n }\r\n else if (item.iframe) {\r\n return 'iframe';\r\n }\r\n else {\r\n return 'image';\r\n }\r\n };\r\n LightGallery.prototype.touchMove = function (startCoords, endCoords, e) {\r\n var distanceX = endCoords.pageX - startCoords.pageX;\r\n var distanceY = endCoords.pageY - startCoords.pageY;\r\n var allowSwipe = false;\r\n if (this.swipeDirection) {\r\n allowSwipe = true;\r\n }\r\n else {\r\n if (Math.abs(distanceX) > 15) {\r\n this.swipeDirection = 'horizontal';\r\n allowSwipe = true;\r\n }\r\n else if (Math.abs(distanceY) > 15) {\r\n this.swipeDirection = 'vertical';\r\n allowSwipe = true;\r\n }\r\n }\r\n if (!allowSwipe) {\r\n return;\r\n }\r\n var $currentSlide = this.getSlideItem(this.index);\r\n if (this.swipeDirection === 'horizontal') {\r\n e === null || e === void 0 ? void 0 : e.preventDefault();\r\n // reset opacity and transition duration\r\n this.outer.addClass('lg-dragging');\r\n // move current slide\r\n this.setTranslate($currentSlide, distanceX, 0);\r\n // move next and prev slide with current slide\r\n var width = $currentSlide.get().offsetWidth;\r\n var slideWidthAmount = (width * 15) / 100;\r\n var gutter = slideWidthAmount - Math.abs((distanceX * 10) / 100);\r\n this.setTranslate(this.outer.find('.lg-prev-slide').first(), -width + distanceX - gutter, 0);\r\n this.setTranslate(this.outer.find('.lg-next-slide').first(), width + distanceX + gutter, 0);\r\n }\r\n else if (this.swipeDirection === 'vertical') {\r\n if (this.settings.swipeToClose) {\r\n e === null || e === void 0 ? void 0 : e.preventDefault();\r\n this.$container.addClass('lg-dragging-vertical');\r\n var opacity = 1 - Math.abs(distanceY) / window.innerHeight;\r\n this.$backdrop.css('opacity', opacity);\r\n var scale = 1 - Math.abs(distanceY) / (window.innerWidth * 2);\r\n this.setTranslate($currentSlide, 0, distanceY, scale, scale);\r\n if (Math.abs(distanceY) > 100) {\r\n this.outer\r\n .addClass('lg-hide-items')\r\n .removeClass('lg-components-open');\r\n }\r\n }\r\n }\r\n };\r\n LightGallery.prototype.touchEnd = function (endCoords, startCoords, event) {\r\n var _this = this;\r\n var distance;\r\n // keep slide animation for any mode while dragg/swipe\r\n if (this.settings.mode !== 'lg-slide') {\r\n this.outer.addClass('lg-slide');\r\n }\r\n // set transition duration\r\n setTimeout(function () {\r\n _this.$container.removeClass('lg-dragging-vertical');\r\n _this.outer\r\n .removeClass('lg-dragging lg-hide-items')\r\n .addClass('lg-components-open');\r\n var triggerClick = true;\r\n if (_this.swipeDirection === 'horizontal') {\r\n distance = endCoords.pageX - startCoords.pageX;\r\n var distanceAbs = Math.abs(endCoords.pageX - startCoords.pageX);\r\n if (distance < 0 &&\r\n distanceAbs > _this.settings.swipeThreshold) {\r\n _this.goToNextSlide(true);\r\n triggerClick = false;\r\n }\r\n else if (distance > 0 &&\r\n distanceAbs > _this.settings.swipeThreshold) {\r\n _this.goToPrevSlide(true);\r\n triggerClick = false;\r\n }\r\n }\r\n else if (_this.swipeDirection === 'vertical') {\r\n distance = Math.abs(endCoords.pageY - startCoords.pageY);\r\n if (_this.settings.closable &&\r\n _this.settings.swipeToClose &&\r\n distance > 100) {\r\n _this.closeGallery();\r\n return;\r\n }\r\n else {\r\n _this.$backdrop.css('opacity', 1);\r\n }\r\n }\r\n _this.outer.find('.lg-item').removeAttr('style');\r\n if (triggerClick &&\r\n Math.abs(endCoords.pageX - startCoords.pageX) < 5) {\r\n // Trigger click if distance is less than 5 pix\r\n var target = $LG(event.target);\r\n if (_this.isPosterElement(target)) {\r\n _this.LGel.trigger(lGEvents.posterClick);\r\n }\r\n }\r\n _this.swipeDirection = undefined;\r\n });\r\n // remove slide class once drag/swipe is completed if mode is not slide\r\n setTimeout(function () {\r\n if (!_this.outer.hasClass('lg-dragging') &&\r\n _this.settings.mode !== 'lg-slide') {\r\n _this.outer.removeClass('lg-slide');\r\n }\r\n }, this.settings.speed + 100);\r\n };\r\n LightGallery.prototype.enableSwipe = function () {\r\n var _this = this;\r\n var startCoords = {};\r\n var endCoords = {};\r\n var isMoved = false;\r\n var isSwiping = false;\r\n if (this.settings.enableSwipe) {\r\n this.$inner.on('touchstart.lg', function (e) {\r\n _this.dragOrSwipeEnabled = true;\r\n var $item = _this.getSlideItem(_this.index);\r\n if (($LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target)) &&\r\n !_this.outer.hasClass('lg-zoomed') &&\r\n !_this.lgBusy &&\r\n e.touches.length === 1) {\r\n isSwiping = true;\r\n _this.touchAction = 'swipe';\r\n _this.manageSwipeClass();\r\n startCoords = {\r\n pageX: e.touches[0].pageX,\r\n pageY: e.touches[0].pageY,\r\n };\r\n }\r\n });\r\n this.$inner.on('touchmove.lg', function (e) {\r\n if (isSwiping &&\r\n _this.touchAction === 'swipe' &&\r\n e.touches.length === 1) {\r\n endCoords = {\r\n pageX: e.touches[0].pageX,\r\n pageY: e.touches[0].pageY,\r\n };\r\n _this.touchMove(startCoords, endCoords, e);\r\n isMoved = true;\r\n }\r\n });\r\n this.$inner.on('touchend.lg', function (event) {\r\n if (_this.touchAction === 'swipe') {\r\n if (isMoved) {\r\n isMoved = false;\r\n _this.touchEnd(endCoords, startCoords, event);\r\n }\r\n else if (isSwiping) {\r\n var target = $LG(event.target);\r\n if (_this.isPosterElement(target)) {\r\n _this.LGel.trigger(lGEvents.posterClick);\r\n }\r\n }\r\n _this.touchAction = undefined;\r\n isSwiping = false;\r\n }\r\n });\r\n }\r\n };\r\n LightGallery.prototype.enableDrag = function () {\r\n var _this = this;\r\n var startCoords = {};\r\n var endCoords = {};\r\n var isDraging = false;\r\n var isMoved = false;\r\n if (this.settings.enableDrag) {\r\n this.outer.on('mousedown.lg', function (e) {\r\n _this.dragOrSwipeEnabled = true;\r\n var $item = _this.getSlideItem(_this.index);\r\n if ($LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target)) {\r\n if (!_this.outer.hasClass('lg-zoomed') && !_this.lgBusy) {\r\n e.preventDefault();\r\n if (!_this.lgBusy) {\r\n _this.manageSwipeClass();\r\n startCoords = {\r\n pageX: e.pageX,\r\n pageY: e.pageY,\r\n };\r\n isDraging = true;\r\n // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723\r\n _this.outer.get().scrollLeft += 1;\r\n _this.outer.get().scrollLeft -= 1;\r\n // *\r\n _this.outer\r\n .removeClass('lg-grab')\r\n .addClass('lg-grabbing');\r\n _this.LGel.trigger(lGEvents.dragStart);\r\n }\r\n }\r\n }\r\n });\r\n $LG(window).on(\"mousemove.lg.global\" + this.lgId, function (e) {\r\n if (isDraging && _this.lgOpened) {\r\n isMoved = true;\r\n endCoords = {\r\n pageX: e.pageX,\r\n pageY: e.pageY,\r\n };\r\n _this.touchMove(startCoords, endCoords);\r\n _this.LGel.trigger(lGEvents.dragMove);\r\n }\r\n });\r\n $LG(window).on(\"mouseup.lg.global\" + this.lgId, function (event) {\r\n if (!_this.lgOpened) {\r\n return;\r\n }\r\n var target = $LG(event.target);\r\n if (isMoved) {\r\n isMoved = false;\r\n _this.touchEnd(endCoords, startCoords, event);\r\n _this.LGel.trigger(lGEvents.dragEnd);\r\n }\r\n else if (_this.isPosterElement(target)) {\r\n _this.LGel.trigger(lGEvents.posterClick);\r\n }\r\n // Prevent execution on click\r\n if (isDraging) {\r\n isDraging = false;\r\n _this.outer.removeClass('lg-grabbing').addClass('lg-grab');\r\n }\r\n });\r\n }\r\n };\r\n LightGallery.prototype.triggerPosterClick = function () {\r\n var _this = this;\r\n this.$inner.on('click.lg', function (event) {\r\n if (!_this.dragOrSwipeEnabled &&\r\n _this.isPosterElement($LG(event.target))) {\r\n _this.LGel.trigger(lGEvents.posterClick);\r\n }\r\n });\r\n };\r\n LightGallery.prototype.manageSwipeClass = function () {\r\n var _touchNext = this.index + 1;\r\n var _touchPrev = this.index - 1;\r\n if (this.settings.loop && this.galleryItems.length > 2) {\r\n if (this.index === 0) {\r\n _touchPrev = this.galleryItems.length - 1;\r\n }\r\n else if (this.index === this.galleryItems.length - 1) {\r\n _touchNext = 0;\r\n }\r\n }\r\n this.outer.find('.lg-item').removeClass('lg-next-slide lg-prev-slide');\r\n if (_touchPrev > -1) {\r\n this.getSlideItem(_touchPrev).addClass('lg-prev-slide');\r\n }\r\n this.getSlideItem(_touchNext).addClass('lg-next-slide');\r\n };\r\n /**\r\n * Go to next slide\r\n * @param {Boolean} fromTouch - true if slide function called via touch event\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * plugin.goToNextSlide();\r\n * @see Demo\r\n */\r\n LightGallery.prototype.goToNextSlide = function (fromTouch) {\r\n var _this = this;\r\n var _loop = this.settings.loop;\r\n if (fromTouch && this.galleryItems.length < 3) {\r\n _loop = false;\r\n }\r\n if (!this.lgBusy) {\r\n if (this.index + 1 < this.galleryItems.length) {\r\n this.index++;\r\n this.LGel.trigger(lGEvents.beforeNextSlide, {\r\n index: this.index,\r\n });\r\n this.slide(this.index, !!fromTouch, false, 'next');\r\n }\r\n else {\r\n if (_loop) {\r\n this.index = 0;\r\n this.LGel.trigger(lGEvents.beforeNextSlide, {\r\n index: this.index,\r\n });\r\n this.slide(this.index, !!fromTouch, false, 'next');\r\n }\r\n else if (this.settings.slideEndAnimation && !fromTouch) {\r\n this.outer.addClass('lg-right-end');\r\n setTimeout(function () {\r\n _this.outer.removeClass('lg-right-end');\r\n }, 400);\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Go to previous slides\r\n * @param {Boolean} fromTouch - true if slide function called via touch event\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery({});\r\n * plugin.goToPrevSlide();\r\n * @see Demo\r\n *\r\n */\r\n LightGallery.prototype.goToPrevSlide = function (fromTouch) {\r\n var _this = this;\r\n var _loop = this.settings.loop;\r\n if (fromTouch && this.galleryItems.length < 3) {\r\n _loop = false;\r\n }\r\n if (!this.lgBusy) {\r\n if (this.index > 0) {\r\n this.index--;\r\n this.LGel.trigger(lGEvents.beforePrevSlide, {\r\n index: this.index,\r\n fromTouch: fromTouch,\r\n });\r\n this.slide(this.index, !!fromTouch, false, 'prev');\r\n }\r\n else {\r\n if (_loop) {\r\n this.index = this.galleryItems.length - 1;\r\n this.LGel.trigger(lGEvents.beforePrevSlide, {\r\n index: this.index,\r\n fromTouch: fromTouch,\r\n });\r\n this.slide(this.index, !!fromTouch, false, 'prev');\r\n }\r\n else if (this.settings.slideEndAnimation && !fromTouch) {\r\n this.outer.addClass('lg-left-end');\r\n setTimeout(function () {\r\n _this.outer.removeClass('lg-left-end');\r\n }, 400);\r\n }\r\n }\r\n }\r\n };\r\n LightGallery.prototype.keyPress = function () {\r\n var _this = this;\r\n $LG(window).on(\"keydown.lg.global\" + this.lgId, function (e) {\r\n if (_this.lgOpened &&\r\n _this.settings.escKey === true &&\r\n e.keyCode === 27) {\r\n e.preventDefault();\r\n if (_this.settings.allowMediaOverlap &&\r\n _this.outer.hasClass('lg-can-toggle') &&\r\n _this.outer.hasClass('lg-components-open')) {\r\n _this.outer.removeClass('lg-components-open');\r\n }\r\n else {\r\n _this.closeGallery();\r\n }\r\n }\r\n if (_this.lgOpened && _this.galleryItems.length > 1) {\r\n if (e.keyCode === 37) {\r\n e.preventDefault();\r\n _this.goToPrevSlide();\r\n }\r\n if (e.keyCode === 39) {\r\n e.preventDefault();\r\n _this.goToNextSlide();\r\n }\r\n }\r\n });\r\n };\r\n LightGallery.prototype.arrow = function () {\r\n var _this = this;\r\n this.getElementById('lg-prev').on('click.lg', function () {\r\n _this.goToPrevSlide();\r\n });\r\n this.getElementById('lg-next').on('click.lg', function () {\r\n _this.goToNextSlide();\r\n });\r\n };\r\n LightGallery.prototype.arrowDisable = function (index) {\r\n // Disable arrows if settings.hideControlOnEnd is true\r\n if (!this.settings.loop && this.settings.hideControlOnEnd) {\r\n var $prev = this.getElementById('lg-prev');\r\n var $next = this.getElementById('lg-next');\r\n if (index + 1 === this.galleryItems.length) {\r\n $next.attr('disabled', 'disabled').addClass('disabled');\r\n }\r\n else {\r\n $next.removeAttr('disabled').removeClass('disabled');\r\n }\r\n if (index === 0) {\r\n $prev.attr('disabled', 'disabled').addClass('disabled');\r\n }\r\n else {\r\n $prev.removeAttr('disabled').removeClass('disabled');\r\n }\r\n }\r\n };\r\n LightGallery.prototype.setTranslate = function ($el, xValue, yValue, scaleX, scaleY) {\r\n if (scaleX === void 0) { scaleX = 1; }\r\n if (scaleY === void 0) { scaleY = 1; }\r\n $el.css('transform', 'translate3d(' +\r\n xValue +\r\n 'px, ' +\r\n yValue +\r\n 'px, 0px) scale3d(' +\r\n scaleX +\r\n ', ' +\r\n scaleY +\r\n ', 1)');\r\n };\r\n LightGallery.prototype.mousewheel = function () {\r\n var _this = this;\r\n var lastCall = 0;\r\n this.outer.on('wheel.lg', function (e) {\r\n if (!e.deltaY || _this.galleryItems.length < 2) {\r\n return;\r\n }\r\n e.preventDefault();\r\n var now = new Date().getTime();\r\n if (now - lastCall < 1000) {\r\n return;\r\n }\r\n lastCall = now;\r\n if (e.deltaY > 0) {\r\n _this.goToNextSlide();\r\n }\r\n else if (e.deltaY < 0) {\r\n _this.goToPrevSlide();\r\n }\r\n });\r\n };\r\n LightGallery.prototype.isSlideElement = function (target) {\r\n return (target.hasClass('lg-outer') ||\r\n target.hasClass('lg-item') ||\r\n target.hasClass('lg-img-wrap'));\r\n };\r\n LightGallery.prototype.isPosterElement = function (target) {\r\n var playButton = this.getSlideItem(this.index)\r\n .find('.lg-video-play-button')\r\n .get();\r\n return (target.hasClass('lg-video-poster') ||\r\n target.hasClass('lg-video-play-button') ||\r\n (playButton && playButton.contains(target.get())));\r\n };\r\n /**\r\n * Maximize minimize inline gallery.\r\n * @category lGPublicMethods\r\n */\r\n LightGallery.prototype.toggleMaximize = function () {\r\n var _this = this;\r\n this.getElementById('lg-maximize').on('click.lg', function () {\r\n _this.$container.toggleClass('lg-inline');\r\n _this.refreshOnResize();\r\n });\r\n };\r\n LightGallery.prototype.invalidateItems = function () {\r\n for (var index = 0; index < this.items.length; index++) {\r\n var element = this.items[index];\r\n var $element = $LG(element);\r\n $element.off(\"click.lgcustom-item-\" + $element.attr('data-lg-id'));\r\n }\r\n };\r\n LightGallery.prototype.trapFocus = function () {\r\n var _this = this;\r\n this.$container.get().focus({\r\n preventScroll: true,\r\n });\r\n $LG(window).on(\"keydown.lg.global\" + this.lgId, function (e) {\r\n if (!_this.lgOpened) {\r\n return;\r\n }\r\n var isTabPressed = e.key === 'Tab' || e.keyCode === 9;\r\n if (!isTabPressed) {\r\n return;\r\n }\r\n var focusableEls = utils.getFocusableElements(_this.$container.get());\r\n var firstFocusableEl = focusableEls[0];\r\n var lastFocusableEl = focusableEls[focusableEls.length - 1];\r\n if (e.shiftKey) {\r\n if (document.activeElement === firstFocusableEl) {\r\n lastFocusableEl.focus();\r\n e.preventDefault();\r\n }\r\n }\r\n else {\r\n if (document.activeElement === lastFocusableEl) {\r\n firstFocusableEl.focus();\r\n e.preventDefault();\r\n }\r\n }\r\n });\r\n };\r\n LightGallery.prototype.manageCloseGallery = function () {\r\n var _this = this;\r\n if (!this.settings.closable)\r\n return;\r\n var mousedown = false;\r\n this.getElementById('lg-close').on('click.lg', function () {\r\n _this.closeGallery();\r\n });\r\n if (this.settings.closeOnTap) {\r\n // If you drag the slide and release outside gallery gets close on chrome\r\n // for preventing this check mousedown and mouseup happened on .lg-item or lg-outer\r\n this.outer.on('mousedown.lg', function (e) {\r\n var target = $LG(e.target);\r\n if (_this.isSlideElement(target)) {\r\n mousedown = true;\r\n }\r\n else {\r\n mousedown = false;\r\n }\r\n });\r\n this.outer.on('mousemove.lg', function () {\r\n mousedown = false;\r\n });\r\n this.outer.on('mouseup.lg', function (e) {\r\n var target = $LG(e.target);\r\n if (_this.isSlideElement(target) && mousedown) {\r\n if (!_this.outer.hasClass('lg-dragging')) {\r\n _this.closeGallery();\r\n }\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Close lightGallery if it is opened.\r\n *\r\n * @description If closable is false in the settings, you need to pass true via closeGallery method to force close gallery\r\n * @return returns the estimated time to close gallery completely including the close animation duration\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * plugin.closeGallery();\r\n *\r\n */\r\n LightGallery.prototype.closeGallery = function (force) {\r\n var _this = this;\r\n if (!this.lgOpened || (!this.settings.closable && !force)) {\r\n return 0;\r\n }\r\n this.LGel.trigger(lGEvents.beforeClose);\r\n if (this.settings.resetScrollPosition && !this.settings.hideScrollbar) {\r\n $LG(window).scrollTop(this.prevScrollTop);\r\n }\r\n var currentItem = this.items[this.index];\r\n var transform;\r\n if (this.zoomFromOrigin && currentItem) {\r\n var _a = this.mediaContainerPosition, top_4 = _a.top, bottom = _a.bottom;\r\n var _b = this.galleryItems[this.index], __slideVideoInfo = _b.__slideVideoInfo, poster = _b.poster;\r\n var imageSize = utils.getSize(currentItem, this.outer, top_4 + bottom, __slideVideoInfo && poster && this.settings.videoMaxSize);\r\n transform = utils.getTransform(currentItem, this.outer, top_4, bottom, imageSize);\r\n }\r\n if (this.zoomFromOrigin && transform) {\r\n this.outer.addClass('lg-closing lg-zoom-from-image');\r\n this.getSlideItem(this.index)\r\n .addClass('lg-start-end-progress')\r\n .css('transition-duration', this.settings.startAnimationDuration + 'ms')\r\n .css('transform', transform);\r\n }\r\n else {\r\n this.outer.addClass('lg-hide-items');\r\n // lg-zoom-from-image is used for setting the opacity to 1 if zoomFromOrigin is true\r\n // If the closing item doesn't have the lg-size attribute, remove this class to avoid the closing css conflicts\r\n this.outer.removeClass('lg-zoom-from-image');\r\n }\r\n // Unbind all events added by lightGallery\r\n // @todo\r\n //this.$el.off('.lg.tm');\r\n this.destroyModules();\r\n this.lGalleryOn = false;\r\n this.isDummyImageRemoved = false;\r\n this.zoomFromOrigin = this.settings.zoomFromOrigin;\r\n clearTimeout(this.hideBarTimeout);\r\n this.hideBarTimeout = false;\r\n $LG('html').removeClass('lg-on');\r\n this.outer.removeClass('lg-visible lg-components-open');\r\n // Resetting opacity to 0 isd required as vertical swipe to close function adds inline opacity.\r\n this.$backdrop.removeClass('in').css('opacity', 0);\r\n var removeTimeout = this.zoomFromOrigin && transform\r\n ? Math.max(this.settings.startAnimationDuration, this.settings.backdropDuration)\r\n : this.settings.backdropDuration;\r\n this.$container.removeClass('lg-show-in');\r\n // Once the closign animation is completed and gallery is invisible\r\n setTimeout(function () {\r\n if (_this.zoomFromOrigin && transform) {\r\n _this.outer.removeClass('lg-zoom-from-image');\r\n }\r\n _this.$container.removeClass('lg-show');\r\n // Reset scrollbar\r\n _this.resetScrollBar();\r\n // Need to remove inline opacity as it is used in the stylesheet as well\r\n _this.$backdrop\r\n .removeAttr('style')\r\n .css('transition-duration', _this.settings.backdropDuration + 'ms');\r\n _this.outer.removeClass(\"lg-closing \" + _this.settings.startClass);\r\n _this.getSlideItem(_this.index).removeClass('lg-start-end-progress');\r\n _this.$inner.empty();\r\n if (_this.lgOpened) {\r\n _this.LGel.trigger(lGEvents.afterClose, {\r\n instance: _this,\r\n });\r\n }\r\n if (_this.$container.get()) {\r\n _this.$container.get().blur();\r\n }\r\n _this.lgOpened = false;\r\n }, removeTimeout + 100);\r\n return removeTimeout + 100;\r\n };\r\n LightGallery.prototype.initModules = function () {\r\n this.plugins.forEach(function (module) {\r\n try {\r\n module.init();\r\n }\r\n catch (err) {\r\n console.warn(\"lightGallery:- make sure lightGallery module is properly initiated\");\r\n }\r\n });\r\n };\r\n LightGallery.prototype.destroyModules = function (destroy) {\r\n this.plugins.forEach(function (module) {\r\n try {\r\n if (destroy) {\r\n module.destroy();\r\n }\r\n else {\r\n module.closeGallery && module.closeGallery();\r\n }\r\n }\r\n catch (err) {\r\n console.warn(\"lightGallery:- make sure lightGallery module is properly destroyed\");\r\n }\r\n });\r\n };\r\n /**\r\n * Refresh lightGallery with new set of children.\r\n *\r\n * @description This is useful to update the gallery when the child elements are changed without calling destroy method.\r\n *\r\n * If you are using dynamic mode, you can pass the modified array of dynamicEl as the first parameter to refresh the dynamic gallery\r\n * @see Demo\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * // Delete or add children, then call\r\n * plugin.refresh();\r\n *\r\n */\r\n LightGallery.prototype.refresh = function (galleryItems) {\r\n if (!this.settings.dynamic) {\r\n this.invalidateItems();\r\n }\r\n if (galleryItems) {\r\n this.galleryItems = galleryItems;\r\n }\r\n else {\r\n this.galleryItems = this.getItems();\r\n }\r\n this.updateControls();\r\n this.openGalleryOnItemClick();\r\n this.LGel.trigger(lGEvents.updateSlides);\r\n };\r\n LightGallery.prototype.updateControls = function () {\r\n this.addSlideVideoInfo(this.galleryItems);\r\n this.updateCounterTotal();\r\n this.manageSingleSlideClassName();\r\n };\r\n LightGallery.prototype.destroyGallery = function () {\r\n this.destroyModules(true);\r\n if (!this.settings.dynamic) {\r\n this.invalidateItems();\r\n }\r\n $LG(window).off(\".lg.global\" + this.lgId);\r\n this.LGel.off('.lg');\r\n this.$container.remove();\r\n };\r\n /**\r\n * Destroy lightGallery.\r\n * Destroy lightGallery and its plugin instances completely\r\n *\r\n * @description This method also calls CloseGallery function internally. Returns the time takes to completely close and destroy the instance.\r\n * In case if you want to re-initialize lightGallery right after destroying it, initialize it only once the destroy process is completed.\r\n * You can use refresh method most of the times.\r\n * @category lGPublicMethods\r\n * @example\r\n * const plugin = lightGallery();\r\n * plugin.destroy();\r\n *\r\n */\r\n LightGallery.prototype.destroy = function () {\r\n var closeTimeout = this.closeGallery(true);\r\n if (closeTimeout) {\r\n setTimeout(this.destroyGallery.bind(this), closeTimeout);\r\n }\r\n else {\r\n this.destroyGallery();\r\n }\r\n return closeTimeout;\r\n };\r\n return LightGallery;\r\n}());\n\nfunction lightGallery(el, options) {\r\n return new LightGallery(el, options);\r\n}\n\nexport default lightGallery;\n//# sourceMappingURL=lightgallery.es5.js.map\n","/*!\n * lightgallery | 2.7.2 | September 20th 2023\n * http://www.lightgalleryjs.com/\n * Copyright (c) 2020 Sachin Neravath;\n * @license GPLv3\n */\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nvar thumbnailsSettings = {\r\n thumbnail: true,\r\n animateThumb: true,\r\n currentPagerPosition: 'middle',\r\n alignThumbnails: 'middle',\r\n thumbWidth: 100,\r\n thumbHeight: '80px',\r\n thumbMargin: 5,\r\n appendThumbnailsTo: '.lg-components',\r\n toggleThumb: false,\r\n enableThumbDrag: true,\r\n enableThumbSwipe: true,\r\n thumbnailSwipeThreshold: 10,\r\n loadYouTubeThumbnail: true,\r\n youTubeThumbSize: 1,\r\n thumbnailPluginStrings: {\r\n toggleThumbnails: 'Toggle thumbnails',\r\n },\r\n};\n\n/**\r\n * List of lightGallery events\r\n * All events should be documented here\r\n * Below interfaces are used to build the website documentations\r\n * */\r\nvar lGEvents = {\r\n afterAppendSlide: 'lgAfterAppendSlide',\r\n init: 'lgInit',\r\n hasVideo: 'lgHasVideo',\r\n containerResize: 'lgContainerResize',\r\n updateSlides: 'lgUpdateSlides',\r\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\r\n beforeOpen: 'lgBeforeOpen',\r\n afterOpen: 'lgAfterOpen',\r\n slideItemLoad: 'lgSlideItemLoad',\r\n beforeSlide: 'lgBeforeSlide',\r\n afterSlide: 'lgAfterSlide',\r\n posterClick: 'lgPosterClick',\r\n dragStart: 'lgDragStart',\r\n dragMove: 'lgDragMove',\r\n dragEnd: 'lgDragEnd',\r\n beforeNextSlide: 'lgBeforeNextSlide',\r\n beforePrevSlide: 'lgBeforePrevSlide',\r\n beforeClose: 'lgBeforeClose',\r\n afterClose: 'lgAfterClose',\r\n rotateLeft: 'lgRotateLeft',\r\n rotateRight: 'lgRotateRight',\r\n flipHorizontal: 'lgFlipHorizontal',\r\n flipVertical: 'lgFlipVertical',\r\n autoplay: 'lgAutoplay',\r\n autoplayStart: 'lgAutoplayStart',\r\n autoplayStop: 'lgAutoplayStop',\r\n};\n\nvar Thumbnail = /** @class */ (function () {\r\n function Thumbnail(instance, $LG) {\r\n this.thumbOuterWidth = 0;\r\n this.thumbTotalWidth = 0;\r\n this.translateX = 0;\r\n this.thumbClickable = false;\r\n // get lightGallery core plugin instance\r\n this.core = instance;\r\n this.$LG = $LG;\r\n return this;\r\n }\r\n Thumbnail.prototype.init = function () {\r\n // extend module default settings with lightGallery core settings\r\n this.settings = __assign(__assign({}, thumbnailsSettings), this.core.settings);\r\n this.thumbOuterWidth = 0;\r\n this.thumbTotalWidth =\r\n this.core.galleryItems.length *\r\n (this.settings.thumbWidth + this.settings.thumbMargin);\r\n // Thumbnail animation value\r\n this.translateX = 0;\r\n this.setAnimateThumbStyles();\r\n if (!this.core.settings.allowMediaOverlap) {\r\n this.settings.toggleThumb = false;\r\n }\r\n if (this.settings.thumbnail) {\r\n this.build();\r\n if (this.settings.animateThumb) {\r\n if (this.settings.enableThumbDrag) {\r\n this.enableThumbDrag();\r\n }\r\n if (this.settings.enableThumbSwipe) {\r\n this.enableThumbSwipe();\r\n }\r\n this.thumbClickable = false;\r\n }\r\n else {\r\n this.thumbClickable = true;\r\n }\r\n this.toggleThumbBar();\r\n this.thumbKeyPress();\r\n }\r\n };\r\n Thumbnail.prototype.build = function () {\r\n var _this = this;\r\n this.setThumbMarkup();\r\n this.manageActiveClassOnSlideChange();\r\n this.$lgThumb.first().on('click.lg touchend.lg', function (e) {\r\n var $target = _this.$LG(e.target);\r\n if (!$target.hasAttribute('data-lg-item-id')) {\r\n return;\r\n }\r\n setTimeout(function () {\r\n // In IE9 and bellow touch does not support\r\n // Go to slide if browser does not support css transitions\r\n if (_this.thumbClickable && !_this.core.lgBusy) {\r\n var index = parseInt($target.attr('data-lg-item-id'));\r\n _this.core.slide(index, false, true, false);\r\n }\r\n }, 50);\r\n });\r\n this.core.LGel.on(lGEvents.beforeSlide + \".thumb\", function (event) {\r\n var index = event.detail.index;\r\n _this.animateThumb(index);\r\n });\r\n this.core.LGel.on(lGEvents.beforeOpen + \".thumb\", function () {\r\n _this.thumbOuterWidth = _this.core.outer.get().offsetWidth;\r\n });\r\n this.core.LGel.on(lGEvents.updateSlides + \".thumb\", function () {\r\n _this.rebuildThumbnails();\r\n });\r\n this.core.LGel.on(lGEvents.containerResize + \".thumb\", function () {\r\n if (!_this.core.lgOpened)\r\n return;\r\n setTimeout(function () {\r\n _this.thumbOuterWidth = _this.core.outer.get().offsetWidth;\r\n _this.animateThumb(_this.core.index);\r\n _this.thumbOuterWidth = _this.core.outer.get().offsetWidth;\r\n }, 50);\r\n });\r\n };\r\n Thumbnail.prototype.setThumbMarkup = function () {\r\n var thumbOuterClassNames = 'lg-thumb-outer ';\r\n if (this.settings.alignThumbnails) {\r\n thumbOuterClassNames += \"lg-thumb-align-\" + this.settings.alignThumbnails;\r\n }\r\n var html = \"
\\n
\\n
\\n
\";\r\n this.core.outer.addClass('lg-has-thumb');\r\n if (this.settings.appendThumbnailsTo === '.lg-components') {\r\n this.core.$lgComponents.append(html);\r\n }\r\n else {\r\n this.core.outer.append(html);\r\n }\r\n this.$thumbOuter = this.core.outer.find('.lg-thumb-outer').first();\r\n this.$lgThumb = this.core.outer.find('.lg-thumb').first();\r\n if (this.settings.animateThumb) {\r\n this.core.outer\r\n .find('.lg-thumb')\r\n .css('transition-duration', this.core.settings.speed + 'ms')\r\n .css('width', this.thumbTotalWidth + 'px')\r\n .css('position', 'relative');\r\n }\r\n this.setThumbItemHtml(this.core.galleryItems);\r\n };\r\n Thumbnail.prototype.enableThumbDrag = function () {\r\n var _this = this;\r\n var thumbDragUtils = {\r\n cords: {\r\n startX: 0,\r\n endX: 0,\r\n },\r\n isMoved: false,\r\n newTranslateX: 0,\r\n startTime: new Date(),\r\n endTime: new Date(),\r\n touchMoveTime: 0,\r\n };\r\n var isDragging = false;\r\n this.$thumbOuter.addClass('lg-grab');\r\n this.core.outer\r\n .find('.lg-thumb')\r\n .first()\r\n .on('mousedown.lg.thumb', function (e) {\r\n if (_this.thumbTotalWidth > _this.thumbOuterWidth) {\r\n // execute only on .lg-object\r\n e.preventDefault();\r\n thumbDragUtils.cords.startX = e.pageX;\r\n thumbDragUtils.startTime = new Date();\r\n _this.thumbClickable = false;\r\n isDragging = true;\r\n // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723\r\n _this.core.outer.get().scrollLeft += 1;\r\n _this.core.outer.get().scrollLeft -= 1;\r\n // *\r\n _this.$thumbOuter\r\n .removeClass('lg-grab')\r\n .addClass('lg-grabbing');\r\n }\r\n });\r\n this.$LG(window).on(\"mousemove.lg.thumb.global\" + this.core.lgId, function (e) {\r\n if (!_this.core.lgOpened)\r\n return;\r\n if (isDragging) {\r\n thumbDragUtils.cords.endX = e.pageX;\r\n thumbDragUtils = _this.onThumbTouchMove(thumbDragUtils);\r\n }\r\n });\r\n this.$LG(window).on(\"mouseup.lg.thumb.global\" + this.core.lgId, function () {\r\n if (!_this.core.lgOpened)\r\n return;\r\n if (thumbDragUtils.isMoved) {\r\n thumbDragUtils = _this.onThumbTouchEnd(thumbDragUtils);\r\n }\r\n else {\r\n _this.thumbClickable = true;\r\n }\r\n if (isDragging) {\r\n isDragging = false;\r\n _this.$thumbOuter.removeClass('lg-grabbing').addClass('lg-grab');\r\n }\r\n });\r\n };\r\n Thumbnail.prototype.enableThumbSwipe = function () {\r\n var _this = this;\r\n var thumbDragUtils = {\r\n cords: {\r\n startX: 0,\r\n endX: 0,\r\n },\r\n isMoved: false,\r\n newTranslateX: 0,\r\n startTime: new Date(),\r\n endTime: new Date(),\r\n touchMoveTime: 0,\r\n };\r\n this.$lgThumb.on('touchstart.lg', function (e) {\r\n if (_this.thumbTotalWidth > _this.thumbOuterWidth) {\r\n e.preventDefault();\r\n thumbDragUtils.cords.startX = e.targetTouches[0].pageX;\r\n _this.thumbClickable = false;\r\n thumbDragUtils.startTime = new Date();\r\n }\r\n });\r\n this.$lgThumb.on('touchmove.lg', function (e) {\r\n if (_this.thumbTotalWidth > _this.thumbOuterWidth) {\r\n e.preventDefault();\r\n thumbDragUtils.cords.endX = e.targetTouches[0].pageX;\r\n thumbDragUtils = _this.onThumbTouchMove(thumbDragUtils);\r\n }\r\n });\r\n this.$lgThumb.on('touchend.lg', function () {\r\n if (thumbDragUtils.isMoved) {\r\n thumbDragUtils = _this.onThumbTouchEnd(thumbDragUtils);\r\n }\r\n else {\r\n _this.thumbClickable = true;\r\n }\r\n });\r\n };\r\n // Rebuild thumbnails\r\n Thumbnail.prototype.rebuildThumbnails = function () {\r\n var _this = this;\r\n // Remove transitions\r\n this.$thumbOuter.addClass('lg-rebuilding-thumbnails');\r\n setTimeout(function () {\r\n _this.thumbTotalWidth =\r\n _this.core.galleryItems.length *\r\n (_this.settings.thumbWidth + _this.settings.thumbMargin);\r\n _this.$lgThumb.css('width', _this.thumbTotalWidth + 'px');\r\n _this.$lgThumb.empty();\r\n _this.setThumbItemHtml(_this.core.galleryItems);\r\n _this.animateThumb(_this.core.index);\r\n }, 50);\r\n setTimeout(function () {\r\n _this.$thumbOuter.removeClass('lg-rebuilding-thumbnails');\r\n }, 200);\r\n };\r\n // @ts-check\r\n Thumbnail.prototype.setTranslate = function (value) {\r\n this.$lgThumb.css('transform', 'translate3d(-' + value + 'px, 0px, 0px)');\r\n };\r\n Thumbnail.prototype.getPossibleTransformX = function (left) {\r\n if (left > this.thumbTotalWidth - this.thumbOuterWidth) {\r\n left = this.thumbTotalWidth - this.thumbOuterWidth;\r\n }\r\n if (left < 0) {\r\n left = 0;\r\n }\r\n return left;\r\n };\r\n Thumbnail.prototype.animateThumb = function (index) {\r\n this.$lgThumb.css('transition-duration', this.core.settings.speed + 'ms');\r\n if (this.settings.animateThumb) {\r\n var position = 0;\r\n switch (this.settings.currentPagerPosition) {\r\n case 'left':\r\n position = 0;\r\n break;\r\n case 'middle':\r\n position =\r\n this.thumbOuterWidth / 2 - this.settings.thumbWidth / 2;\r\n break;\r\n case 'right':\r\n position = this.thumbOuterWidth - this.settings.thumbWidth;\r\n }\r\n this.translateX =\r\n (this.settings.thumbWidth + this.settings.thumbMargin) * index -\r\n 1 -\r\n position;\r\n if (this.translateX > this.thumbTotalWidth - this.thumbOuterWidth) {\r\n this.translateX = this.thumbTotalWidth - this.thumbOuterWidth;\r\n }\r\n if (this.translateX < 0) {\r\n this.translateX = 0;\r\n }\r\n this.setTranslate(this.translateX);\r\n }\r\n };\r\n Thumbnail.prototype.onThumbTouchMove = function (thumbDragUtils) {\r\n thumbDragUtils.newTranslateX = this.translateX;\r\n thumbDragUtils.isMoved = true;\r\n thumbDragUtils.touchMoveTime = new Date().valueOf();\r\n thumbDragUtils.newTranslateX -=\r\n thumbDragUtils.cords.endX - thumbDragUtils.cords.startX;\r\n thumbDragUtils.newTranslateX = this.getPossibleTransformX(thumbDragUtils.newTranslateX);\r\n // move current slide\r\n this.setTranslate(thumbDragUtils.newTranslateX);\r\n this.$thumbOuter.addClass('lg-dragging');\r\n return thumbDragUtils;\r\n };\r\n Thumbnail.prototype.onThumbTouchEnd = function (thumbDragUtils) {\r\n thumbDragUtils.isMoved = false;\r\n thumbDragUtils.endTime = new Date();\r\n this.$thumbOuter.removeClass('lg-dragging');\r\n var touchDuration = thumbDragUtils.endTime.valueOf() -\r\n thumbDragUtils.startTime.valueOf();\r\n var distanceXnew = thumbDragUtils.cords.endX - thumbDragUtils.cords.startX;\r\n var speedX = Math.abs(distanceXnew) / touchDuration;\r\n // Some magical numbers\r\n // Can be improved\r\n if (speedX > 0.15 &&\r\n thumbDragUtils.endTime.valueOf() - thumbDragUtils.touchMoveTime < 30) {\r\n speedX += 1;\r\n if (speedX > 2) {\r\n speedX += 1;\r\n }\r\n speedX =\r\n speedX +\r\n speedX * (Math.abs(distanceXnew) / this.thumbOuterWidth);\r\n this.$lgThumb.css('transition-duration', Math.min(speedX - 1, 2) + 'settings');\r\n distanceXnew = distanceXnew * speedX;\r\n this.translateX = this.getPossibleTransformX(this.translateX - distanceXnew);\r\n this.setTranslate(this.translateX);\r\n }\r\n else {\r\n this.translateX = thumbDragUtils.newTranslateX;\r\n }\r\n if (Math.abs(thumbDragUtils.cords.endX - thumbDragUtils.cords.startX) <\r\n this.settings.thumbnailSwipeThreshold) {\r\n this.thumbClickable = true;\r\n }\r\n return thumbDragUtils;\r\n };\r\n Thumbnail.prototype.getThumbHtml = function (thumb, index, alt) {\r\n var slideVideoInfo = this.core.galleryItems[index].__slideVideoInfo || {};\r\n var thumbImg;\r\n if (slideVideoInfo.youtube) {\r\n if (this.settings.loadYouTubeThumbnail) {\r\n thumbImg =\r\n '//img.youtube.com/vi/' +\r\n slideVideoInfo.youtube[1] +\r\n '/' +\r\n this.settings.youTubeThumbSize +\r\n '.jpg';\r\n }\r\n else {\r\n thumbImg = thumb;\r\n }\r\n }\r\n else {\r\n thumbImg = thumb;\r\n }\r\n var altAttr = alt ? 'alt=\"' + alt + '\"' : '';\r\n return \"
\\n \\n
\";\r\n };\r\n Thumbnail.prototype.getThumbItemHtml = function (items) {\r\n var thumbList = '';\r\n for (var i = 0; i < items.length; i++) {\r\n thumbList += this.getThumbHtml(items[i].thumb, i, items[i].alt);\r\n }\r\n return thumbList;\r\n };\r\n Thumbnail.prototype.setThumbItemHtml = function (items) {\r\n var thumbList = this.getThumbItemHtml(items);\r\n this.$lgThumb.html(thumbList);\r\n };\r\n Thumbnail.prototype.setAnimateThumbStyles = function () {\r\n if (this.settings.animateThumb) {\r\n this.core.outer.addClass('lg-animate-thumb');\r\n }\r\n };\r\n // Manage thumbnail active calss\r\n Thumbnail.prototype.manageActiveClassOnSlideChange = function () {\r\n var _this = this;\r\n // manage active class for thumbnail\r\n this.core.LGel.on(lGEvents.beforeSlide + \".thumb\", function (event) {\r\n var $thumb = _this.core.outer.find('.lg-thumb-item');\r\n var index = event.detail.index;\r\n $thumb.removeClass('active');\r\n $thumb.eq(index).addClass('active');\r\n });\r\n };\r\n // Toggle thumbnail bar\r\n Thumbnail.prototype.toggleThumbBar = function () {\r\n var _this = this;\r\n if (this.settings.toggleThumb) {\r\n this.core.outer.addClass('lg-can-toggle');\r\n this.core.$toolbar.append('');\r\n this.core.outer\r\n .find('.lg-toggle-thumb')\r\n .first()\r\n .on('click.lg', function () {\r\n _this.core.outer.toggleClass('lg-components-open');\r\n });\r\n }\r\n };\r\n Thumbnail.prototype.thumbKeyPress = function () {\r\n var _this = this;\r\n this.$LG(window).on(\"keydown.lg.thumb.global\" + this.core.lgId, function (e) {\r\n if (!_this.core.lgOpened || !_this.settings.toggleThumb)\r\n return;\r\n if (e.keyCode === 38) {\r\n e.preventDefault();\r\n _this.core.outer.addClass('lg-components-open');\r\n }\r\n else if (e.keyCode === 40) {\r\n e.preventDefault();\r\n _this.core.outer.removeClass('lg-components-open');\r\n }\r\n });\r\n };\r\n Thumbnail.prototype.destroy = function () {\r\n if (this.settings.thumbnail) {\r\n this.$LG(window).off(\".lg.thumb.global\" + this.core.lgId);\r\n this.core.LGel.off('.lg.thumb');\r\n this.core.LGel.off('.thumb');\r\n this.$thumbOuter.remove();\r\n this.core.outer.removeClass('lg-has-thumb');\r\n }\r\n };\r\n return Thumbnail;\r\n}());\n\nexport default Thumbnail;\n//# sourceMappingURL=lg-thumbnail.es5.js.map\n","/*!\n * lightgallery | 2.7.2 | September 20th 2023\n * http://www.lightgalleryjs.com/\n * Copyright (c) 2020 Sachin Neravath;\n * @license GPLv3\n */\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nvar zoomSettings = {\r\n scale: 1,\r\n zoom: true,\r\n infiniteZoom: true,\r\n actualSize: true,\r\n showZoomInOutIcons: false,\r\n actualSizeIcons: {\r\n zoomIn: 'lg-zoom-in',\r\n zoomOut: 'lg-zoom-out',\r\n },\r\n enableZoomAfter: 300,\r\n zoomPluginStrings: {\r\n zoomIn: 'Zoom in',\r\n zoomOut: 'Zoom out',\r\n viewActualSize: 'View actual size',\r\n },\r\n};\n\n/**\r\n * List of lightGallery events\r\n * All events should be documented here\r\n * Below interfaces are used to build the website documentations\r\n * */\r\nvar lGEvents = {\r\n afterAppendSlide: 'lgAfterAppendSlide',\r\n init: 'lgInit',\r\n hasVideo: 'lgHasVideo',\r\n containerResize: 'lgContainerResize',\r\n updateSlides: 'lgUpdateSlides',\r\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\r\n beforeOpen: 'lgBeforeOpen',\r\n afterOpen: 'lgAfterOpen',\r\n slideItemLoad: 'lgSlideItemLoad',\r\n beforeSlide: 'lgBeforeSlide',\r\n afterSlide: 'lgAfterSlide',\r\n posterClick: 'lgPosterClick',\r\n dragStart: 'lgDragStart',\r\n dragMove: 'lgDragMove',\r\n dragEnd: 'lgDragEnd',\r\n beforeNextSlide: 'lgBeforeNextSlide',\r\n beforePrevSlide: 'lgBeforePrevSlide',\r\n beforeClose: 'lgBeforeClose',\r\n afterClose: 'lgAfterClose',\r\n rotateLeft: 'lgRotateLeft',\r\n rotateRight: 'lgRotateRight',\r\n flipHorizontal: 'lgFlipHorizontal',\r\n flipVertical: 'lgFlipVertical',\r\n autoplay: 'lgAutoplay',\r\n autoplayStart: 'lgAutoplayStart',\r\n autoplayStop: 'lgAutoplayStop',\r\n};\n\nvar ZOOM_TRANSITION_DURATION = 500;\r\nvar Zoom = /** @class */ (function () {\r\n function Zoom(instance, $LG) {\r\n // get lightGallery core plugin instance\r\n this.core = instance;\r\n this.$LG = $LG;\r\n this.settings = __assign(__assign({}, zoomSettings), this.core.settings);\r\n return this;\r\n }\r\n // Append Zoom controls. Actual size, Zoom-in, Zoom-out\r\n Zoom.prototype.buildTemplates = function () {\r\n var zoomIcons = this.settings.showZoomInOutIcons\r\n ? \"\"\r\n : '';\r\n if (this.settings.actualSize) {\r\n zoomIcons += \"\";\r\n }\r\n this.core.outer.addClass('lg-use-transition-for-zoom');\r\n this.core.$toolbar.first().append(zoomIcons);\r\n };\r\n /**\r\n * @desc Enable zoom option only once the image is completely loaded\r\n * If zoomFromOrigin is true, Zoom is enabled once the dummy image has been inserted\r\n *\r\n * Zoom styles are defined under lg-zoomable CSS class.\r\n */\r\n Zoom.prototype.enableZoom = function (event) {\r\n var _this = this;\r\n // delay will be 0 except first time\r\n var _speed = this.settings.enableZoomAfter + event.detail.delay;\r\n // set _speed value 0 if gallery opened from direct url and if it is first slide\r\n if (this.$LG('body').first().hasClass('lg-from-hash') &&\r\n event.detail.delay) {\r\n // will execute only once\r\n _speed = 0;\r\n }\r\n else {\r\n // Remove lg-from-hash to enable starting animation.\r\n this.$LG('body').first().removeClass('lg-from-hash');\r\n }\r\n this.zoomableTimeout = setTimeout(function () {\r\n if (!_this.isImageSlide(_this.core.index)) {\r\n return;\r\n }\r\n _this.core.getSlideItem(event.detail.index).addClass('lg-zoomable');\r\n if (event.detail.index === _this.core.index) {\r\n _this.setZoomEssentials();\r\n }\r\n }, _speed + 30);\r\n };\r\n Zoom.prototype.enableZoomOnSlideItemLoad = function () {\r\n // Add zoomable class\r\n this.core.LGel.on(lGEvents.slideItemLoad + \".zoom\", this.enableZoom.bind(this));\r\n };\r\n Zoom.prototype.getDragCords = function (e) {\r\n return {\r\n x: e.pageX,\r\n y: e.pageY,\r\n };\r\n };\r\n Zoom.prototype.getSwipeCords = function (e) {\r\n var x = e.touches[0].pageX;\r\n var y = e.touches[0].pageY;\r\n return {\r\n x: x,\r\n y: y,\r\n };\r\n };\r\n Zoom.prototype.getDragAllowedAxises = function (scale, scaleDiff) {\r\n var $image = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-image')\r\n .first()\r\n .get();\r\n var height = 0;\r\n var width = 0;\r\n var rect = $image.getBoundingClientRect();\r\n if (scale) {\r\n height = $image.offsetHeight * scale;\r\n width = $image.offsetWidth * scale;\r\n }\r\n else if (scaleDiff) {\r\n height = rect.height + scaleDiff * rect.height;\r\n width = rect.width + scaleDiff * rect.width;\r\n }\r\n else {\r\n height = rect.height;\r\n width = rect.width;\r\n }\r\n var allowY = height > this.containerRect.height;\r\n var allowX = width > this.containerRect.width;\r\n return {\r\n allowX: allowX,\r\n allowY: allowY,\r\n };\r\n };\r\n Zoom.prototype.setZoomEssentials = function () {\r\n this.containerRect = this.core.$content.get().getBoundingClientRect();\r\n };\r\n /**\r\n * @desc Image zoom\r\n * Translate the wrap and scale the image to get better user experience\r\n *\r\n * @param {String} scale - Zoom decrement/increment value\r\n */\r\n Zoom.prototype.zoomImage = function (scale, scaleDiff, reposition, resetToMax) {\r\n if (Math.abs(scaleDiff) <= 0)\r\n return;\r\n var offsetX = this.containerRect.width / 2 + this.containerRect.left;\r\n var offsetY = this.containerRect.height / 2 +\r\n this.containerRect.top +\r\n this.scrollTop;\r\n var originalX;\r\n var originalY;\r\n if (scale === 1) {\r\n this.positionChanged = false;\r\n }\r\n var dragAllowedAxises = this.getDragAllowedAxises(0, scaleDiff);\r\n var allowY = dragAllowedAxises.allowY, allowX = dragAllowedAxises.allowX;\r\n if (this.positionChanged) {\r\n originalX = this.left / (this.scale - scaleDiff);\r\n originalY = this.top / (this.scale - scaleDiff);\r\n this.pageX = offsetX - originalX;\r\n this.pageY = offsetY - originalY;\r\n this.positionChanged = false;\r\n }\r\n var possibleSwipeCords = this.getPossibleSwipeDragCords(scaleDiff);\r\n var x;\r\n var y;\r\n var _x = offsetX - this.pageX;\r\n var _y = offsetY - this.pageY;\r\n if (scale - scaleDiff > 1) {\r\n var scaleVal = (scale - scaleDiff) / Math.abs(scaleDiff);\r\n _x =\r\n (scaleDiff < 0 ? -_x : _x) +\r\n this.left * (scaleVal + (scaleDiff < 0 ? -1 : 1));\r\n _y =\r\n (scaleDiff < 0 ? -_y : _y) +\r\n this.top * (scaleVal + (scaleDiff < 0 ? -1 : 1));\r\n x = _x / scaleVal;\r\n y = _y / scaleVal;\r\n }\r\n else {\r\n var scaleVal = (scale - scaleDiff) * scaleDiff;\r\n x = _x * scaleVal;\r\n y = _y * scaleVal;\r\n }\r\n if (reposition) {\r\n if (allowX) {\r\n if (this.isBeyondPossibleLeft(x, possibleSwipeCords.minX)) {\r\n x = possibleSwipeCords.minX;\r\n }\r\n else if (this.isBeyondPossibleRight(x, possibleSwipeCords.maxX)) {\r\n x = possibleSwipeCords.maxX;\r\n }\r\n }\r\n else {\r\n if (scale > 1) {\r\n if (x < possibleSwipeCords.minX) {\r\n x = possibleSwipeCords.minX;\r\n }\r\n else if (x > possibleSwipeCords.maxX) {\r\n x = possibleSwipeCords.maxX;\r\n }\r\n }\r\n }\r\n // @todo fix this\r\n if (allowY) {\r\n if (this.isBeyondPossibleTop(y, possibleSwipeCords.minY)) {\r\n y = possibleSwipeCords.minY;\r\n }\r\n else if (this.isBeyondPossibleBottom(y, possibleSwipeCords.maxY)) {\r\n y = possibleSwipeCords.maxY;\r\n }\r\n }\r\n else {\r\n // If the translate value based on index of beyond the viewport, utilize the available space to prevent image being cut out\r\n if (scale > 1) {\r\n //If image goes beyond viewport top, use the minim possible translate value\r\n if (y < possibleSwipeCords.minY) {\r\n y = possibleSwipeCords.minY;\r\n }\r\n else if (y > possibleSwipeCords.maxY) {\r\n y = possibleSwipeCords.maxY;\r\n }\r\n }\r\n }\r\n }\r\n this.setZoomStyles({\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n });\r\n this.left = x;\r\n this.top = y;\r\n if (resetToMax) {\r\n this.setZoomImageSize();\r\n }\r\n };\r\n Zoom.prototype.resetImageTranslate = function (index) {\r\n if (!this.isImageSlide(index)) {\r\n return;\r\n }\r\n var $image = this.core.getSlideItem(index).find('.lg-image').first();\r\n this.imageReset = false;\r\n $image.removeClass('reset-transition reset-transition-y reset-transition-x');\r\n this.core.outer.removeClass('lg-actual-size');\r\n $image.css('width', 'auto').css('height', 'auto');\r\n setTimeout(function () {\r\n $image.removeClass('no-transition');\r\n }, 10);\r\n };\r\n Zoom.prototype.setZoomImageSize = function () {\r\n var _this = this;\r\n var $image = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-image')\r\n .first();\r\n setTimeout(function () {\r\n var actualSizeScale = _this.getCurrentImageActualSizeScale();\r\n if (_this.scale >= actualSizeScale) {\r\n $image.addClass('no-transition');\r\n _this.imageReset = true;\r\n }\r\n }, ZOOM_TRANSITION_DURATION);\r\n setTimeout(function () {\r\n var actualSizeScale = _this.getCurrentImageActualSizeScale();\r\n if (_this.scale >= actualSizeScale) {\r\n var dragAllowedAxises = _this.getDragAllowedAxises(_this.scale);\r\n $image\r\n .css('width', $image.get().naturalWidth + 'px')\r\n .css('height', $image.get().naturalHeight + 'px');\r\n _this.core.outer.addClass('lg-actual-size');\r\n if (dragAllowedAxises.allowX && dragAllowedAxises.allowY) {\r\n $image.addClass('reset-transition');\r\n }\r\n else if (dragAllowedAxises.allowX &&\r\n !dragAllowedAxises.allowY) {\r\n $image.addClass('reset-transition-x');\r\n }\r\n else if (!dragAllowedAxises.allowX &&\r\n dragAllowedAxises.allowY) {\r\n $image.addClass('reset-transition-y');\r\n }\r\n }\r\n }, ZOOM_TRANSITION_DURATION + 50);\r\n };\r\n /**\r\n * @desc apply scale3d to image and translate to image wrap\r\n * @param {style} X,Y and scale\r\n */\r\n Zoom.prototype.setZoomStyles = function (style) {\r\n var $imageWrap = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-img-wrap')\r\n .first();\r\n var $image = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-image')\r\n .first();\r\n var $dummyImage = this.core.outer\r\n .find('.lg-current .lg-dummy-img')\r\n .first();\r\n this.scale = style.scale;\r\n $image.css('transform', 'scale3d(' + style.scale + ', ' + style.scale + ', 1)');\r\n $dummyImage.css('transform', 'scale3d(' + style.scale + ', ' + style.scale + ', 1)');\r\n var transform = 'translate3d(' + style.x + 'px, ' + style.y + 'px, 0)';\r\n $imageWrap.css('transform', transform);\r\n };\r\n /**\r\n * @param index - Index of the current slide\r\n * @param event - event will be available only if the function is called on clicking/taping the imags\r\n */\r\n Zoom.prototype.setActualSize = function (index, event) {\r\n var _this = this;\r\n if (this.zoomInProgress) {\r\n return;\r\n }\r\n this.zoomInProgress = true;\r\n var currentItem = this.core.galleryItems[this.core.index];\r\n this.resetImageTranslate(index);\r\n setTimeout(function () {\r\n // Allow zoom only on image\r\n if (!currentItem.src ||\r\n _this.core.outer.hasClass('lg-first-slide-loading')) {\r\n return;\r\n }\r\n var scale = _this.getCurrentImageActualSizeScale();\r\n var prevScale = _this.scale;\r\n if (_this.core.outer.hasClass('lg-zoomed')) {\r\n _this.scale = 1;\r\n }\r\n else {\r\n _this.scale = _this.getScale(scale);\r\n }\r\n _this.setPageCords(event);\r\n _this.beginZoom(_this.scale);\r\n _this.zoomImage(_this.scale, _this.scale - prevScale, true, true);\r\n }, 50);\r\n setTimeout(function () {\r\n _this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');\r\n }, 60);\r\n setTimeout(function () {\r\n _this.zoomInProgress = false;\r\n }, ZOOM_TRANSITION_DURATION + 110);\r\n };\r\n Zoom.prototype.getNaturalWidth = function (index) {\r\n var $image = this.core.getSlideItem(index).find('.lg-image').first();\r\n var naturalWidth = this.core.galleryItems[index].width;\r\n return naturalWidth\r\n ? parseFloat(naturalWidth)\r\n : $image.get().naturalWidth;\r\n };\r\n Zoom.prototype.getActualSizeScale = function (naturalWidth, width) {\r\n var _scale;\r\n var scale;\r\n if (naturalWidth >= width) {\r\n _scale = naturalWidth / width;\r\n scale = _scale || 2;\r\n }\r\n else {\r\n scale = 1;\r\n }\r\n return scale;\r\n };\r\n Zoom.prototype.getCurrentImageActualSizeScale = function () {\r\n var $image = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-image')\r\n .first();\r\n var width = $image.get().offsetWidth;\r\n var naturalWidth = this.getNaturalWidth(this.core.index) || width;\r\n return this.getActualSizeScale(naturalWidth, width);\r\n };\r\n Zoom.prototype.getPageCords = function (event) {\r\n var cords = {};\r\n if (event) {\r\n cords.x = event.pageX || event.touches[0].pageX;\r\n cords.y = event.pageY || event.touches[0].pageY;\r\n }\r\n else {\r\n var containerRect = this.core.$content\r\n .get()\r\n .getBoundingClientRect();\r\n cords.x = containerRect.width / 2 + containerRect.left;\r\n cords.y =\r\n containerRect.height / 2 + this.scrollTop + containerRect.top;\r\n }\r\n return cords;\r\n };\r\n Zoom.prototype.setPageCords = function (event) {\r\n var pageCords = this.getPageCords(event);\r\n this.pageX = pageCords.x;\r\n this.pageY = pageCords.y;\r\n };\r\n Zoom.prototype.manageActualPixelClassNames = function () {\r\n var $actualSize = this.core.getElementById('lg-actual-size');\r\n $actualSize\r\n .removeClass(this.settings.actualSizeIcons.zoomIn)\r\n .addClass(this.settings.actualSizeIcons.zoomOut);\r\n };\r\n // If true, zoomed - in else zoomed out\r\n Zoom.prototype.beginZoom = function (scale) {\r\n this.core.outer.removeClass('lg-zoom-drag-transition lg-zoom-dragging');\r\n if (scale > 1) {\r\n this.core.outer.addClass('lg-zoomed');\r\n this.manageActualPixelClassNames();\r\n }\r\n else {\r\n this.resetZoom();\r\n }\r\n return scale > 1;\r\n };\r\n Zoom.prototype.getScale = function (scale) {\r\n var actualSizeScale = this.getCurrentImageActualSizeScale();\r\n if (scale < 1) {\r\n scale = 1;\r\n }\r\n else if (scale > actualSizeScale) {\r\n scale = actualSizeScale;\r\n }\r\n return scale;\r\n };\r\n Zoom.prototype.init = function () {\r\n var _this = this;\r\n if (!this.settings.zoom) {\r\n return;\r\n }\r\n this.buildTemplates();\r\n this.enableZoomOnSlideItemLoad();\r\n var tapped = null;\r\n this.core.outer.on('dblclick.lg', function (event) {\r\n if (!_this.$LG(event.target).hasClass('lg-image')) {\r\n return;\r\n }\r\n _this.setActualSize(_this.core.index, event);\r\n });\r\n this.core.outer.on('touchstart.lg', function (event) {\r\n var $target = _this.$LG(event.target);\r\n if (event.touches.length === 1 && $target.hasClass('lg-image')) {\r\n if (!tapped) {\r\n tapped = setTimeout(function () {\r\n tapped = null;\r\n }, 300);\r\n }\r\n else {\r\n clearTimeout(tapped);\r\n tapped = null;\r\n event.preventDefault();\r\n _this.setActualSize(_this.core.index, event);\r\n }\r\n }\r\n });\r\n this.core.LGel.on(lGEvents.containerResize + \".zoom \" + lGEvents.rotateRight + \".zoom \" + lGEvents.rotateLeft + \".zoom \" + lGEvents.flipHorizontal + \".zoom \" + lGEvents.flipVertical + \".zoom\", function () {\r\n if (!_this.core.lgOpened ||\r\n !_this.isImageSlide(_this.core.index) ||\r\n _this.core.touchAction) {\r\n return;\r\n }\r\n var _LGel = _this.core\r\n .getSlideItem(_this.core.index)\r\n .find('.lg-img-wrap')\r\n .first();\r\n _this.top = 0;\r\n _this.left = 0;\r\n _this.setZoomEssentials();\r\n _this.setZoomSwipeStyles(_LGel, { x: 0, y: 0 });\r\n _this.positionChanged = true;\r\n });\r\n // Update zoom on resize and orientationchange\r\n this.$LG(window).on(\"scroll.lg.zoom.global\" + this.core.lgId, function () {\r\n if (!_this.core.lgOpened)\r\n return;\r\n _this.scrollTop = _this.$LG(window).scrollTop();\r\n });\r\n this.core.getElementById('lg-zoom-out').on('click.lg', function () {\r\n // Allow zoom only on image\r\n if (!_this.isImageSlide(_this.core.index)) {\r\n return;\r\n }\r\n var timeout = 0;\r\n if (_this.imageReset) {\r\n _this.resetImageTranslate(_this.core.index);\r\n timeout = 50;\r\n }\r\n setTimeout(function () {\r\n var scale = _this.scale - _this.settings.scale;\r\n if (scale < 1) {\r\n scale = 1;\r\n }\r\n _this.beginZoom(scale);\r\n _this.zoomImage(scale, -_this.settings.scale, true, !_this.settings.infiniteZoom);\r\n }, timeout);\r\n });\r\n this.core.getElementById('lg-zoom-in').on('click.lg', function () {\r\n _this.zoomIn();\r\n });\r\n this.core.getElementById('lg-actual-size').on('click.lg', function () {\r\n _this.setActualSize(_this.core.index);\r\n });\r\n this.core.LGel.on(lGEvents.beforeOpen + \".zoom\", function () {\r\n _this.core.outer.find('.lg-item').removeClass('lg-zoomable');\r\n });\r\n this.core.LGel.on(lGEvents.afterOpen + \".zoom\", function () {\r\n _this.scrollTop = _this.$LG(window).scrollTop();\r\n // Set the initial value center\r\n _this.pageX = _this.core.outer.width() / 2;\r\n _this.pageY = _this.core.outer.height() / 2 + _this.scrollTop;\r\n _this.scale = 1;\r\n });\r\n // Reset zoom on slide change\r\n this.core.LGel.on(lGEvents.afterSlide + \".zoom\", function (event) {\r\n var prevIndex = event.detail.prevIndex;\r\n _this.scale = 1;\r\n _this.positionChanged = false;\r\n _this.zoomInProgress = false;\r\n _this.resetZoom(prevIndex);\r\n _this.resetImageTranslate(prevIndex);\r\n if (_this.isImageSlide(_this.core.index)) {\r\n _this.setZoomEssentials();\r\n }\r\n });\r\n // Drag option after zoom\r\n this.zoomDrag();\r\n this.pinchZoom();\r\n this.zoomSwipe();\r\n // Store the zoomable timeout value just to clear it while closing\r\n this.zoomableTimeout = false;\r\n this.positionChanged = false;\r\n this.zoomInProgress = false;\r\n };\r\n Zoom.prototype.zoomIn = function () {\r\n // Allow zoom only on image\r\n if (!this.isImageSlide(this.core.index)) {\r\n return;\r\n }\r\n var scale = this.scale + this.settings.scale;\r\n if (!this.settings.infiniteZoom) {\r\n scale = this.getScale(scale);\r\n }\r\n this.beginZoom(scale);\r\n this.zoomImage(scale, Math.min(this.settings.scale, scale - this.scale), true, !this.settings.infiniteZoom);\r\n };\r\n // Reset zoom effect\r\n Zoom.prototype.resetZoom = function (index) {\r\n this.core.outer.removeClass('lg-zoomed lg-zoom-drag-transition');\r\n var $actualSize = this.core.getElementById('lg-actual-size');\r\n var $item = this.core.getSlideItem(index !== undefined ? index : this.core.index);\r\n $actualSize\r\n .removeClass(this.settings.actualSizeIcons.zoomOut)\r\n .addClass(this.settings.actualSizeIcons.zoomIn);\r\n $item.find('.lg-img-wrap').first().removeAttr('style');\r\n $item.find('.lg-image').first().removeAttr('style');\r\n this.scale = 1;\r\n this.left = 0;\r\n this.top = 0;\r\n // Reset pagx pagy values to center\r\n this.setPageCords();\r\n };\r\n Zoom.prototype.getTouchDistance = function (e) {\r\n return Math.sqrt((e.touches[0].pageX - e.touches[1].pageX) *\r\n (e.touches[0].pageX - e.touches[1].pageX) +\r\n (e.touches[0].pageY - e.touches[1].pageY) *\r\n (e.touches[0].pageY - e.touches[1].pageY));\r\n };\r\n Zoom.prototype.pinchZoom = function () {\r\n var _this = this;\r\n var startDist = 0;\r\n var pinchStarted = false;\r\n var initScale = 1;\r\n var prevScale = 0;\r\n var $item = this.core.getSlideItem(this.core.index);\r\n this.core.outer.on('touchstart.lg', function (e) {\r\n $item = _this.core.getSlideItem(_this.core.index);\r\n if (!_this.isImageSlide(_this.core.index)) {\r\n return;\r\n }\r\n if (e.touches.length === 2) {\r\n e.preventDefault();\r\n if (_this.core.outer.hasClass('lg-first-slide-loading')) {\r\n return;\r\n }\r\n initScale = _this.scale || 1;\r\n _this.core.outer.removeClass('lg-zoom-drag-transition lg-zoom-dragging');\r\n _this.setPageCords(e);\r\n _this.resetImageTranslate(_this.core.index);\r\n _this.core.touchAction = 'pinch';\r\n startDist = _this.getTouchDistance(e);\r\n }\r\n });\r\n this.core.$inner.on('touchmove.lg', function (e) {\r\n if (e.touches.length === 2 &&\r\n _this.core.touchAction === 'pinch' &&\r\n (_this.$LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target))) {\r\n e.preventDefault();\r\n var endDist = _this.getTouchDistance(e);\r\n var distance = startDist - endDist;\r\n if (!pinchStarted && Math.abs(distance) > 5) {\r\n pinchStarted = true;\r\n }\r\n if (pinchStarted) {\r\n prevScale = _this.scale;\r\n var _scale = Math.max(1, initScale + -distance * 0.02);\r\n _this.scale =\r\n Math.round((_scale + Number.EPSILON) * 100) / 100;\r\n var diff = _this.scale - prevScale;\r\n _this.zoomImage(_this.scale, Math.round((diff + Number.EPSILON) * 100) / 100, false, false);\r\n }\r\n }\r\n });\r\n this.core.$inner.on('touchend.lg', function (e) {\r\n if (_this.core.touchAction === 'pinch' &&\r\n (_this.$LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target))) {\r\n pinchStarted = false;\r\n startDist = 0;\r\n if (_this.scale <= 1) {\r\n _this.resetZoom();\r\n }\r\n else {\r\n var actualSizeScale = _this.getCurrentImageActualSizeScale();\r\n if (_this.scale >= actualSizeScale) {\r\n var scaleDiff = actualSizeScale - _this.scale;\r\n if (scaleDiff === 0) {\r\n scaleDiff = 0.01;\r\n }\r\n _this.zoomImage(actualSizeScale, scaleDiff, false, true);\r\n }\r\n _this.manageActualPixelClassNames();\r\n _this.core.outer.addClass('lg-zoomed');\r\n }\r\n _this.core.touchAction = undefined;\r\n }\r\n });\r\n };\r\n Zoom.prototype.touchendZoom = function (startCoords, endCoords, allowX, allowY, touchDuration) {\r\n var distanceXnew = endCoords.x - startCoords.x;\r\n var distanceYnew = endCoords.y - startCoords.y;\r\n var speedX = Math.abs(distanceXnew) / touchDuration + 1;\r\n var speedY = Math.abs(distanceYnew) / touchDuration + 1;\r\n if (speedX > 2) {\r\n speedX += 1;\r\n }\r\n if (speedY > 2) {\r\n speedY += 1;\r\n }\r\n distanceXnew = distanceXnew * speedX;\r\n distanceYnew = distanceYnew * speedY;\r\n var _LGel = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-img-wrap')\r\n .first();\r\n var distance = {};\r\n distance.x = this.left + distanceXnew;\r\n distance.y = this.top + distanceYnew;\r\n var possibleSwipeCords = this.getPossibleSwipeDragCords();\r\n if (Math.abs(distanceXnew) > 15 || Math.abs(distanceYnew) > 15) {\r\n if (allowY) {\r\n if (this.isBeyondPossibleTop(distance.y, possibleSwipeCords.minY)) {\r\n distance.y = possibleSwipeCords.minY;\r\n }\r\n else if (this.isBeyondPossibleBottom(distance.y, possibleSwipeCords.maxY)) {\r\n distance.y = possibleSwipeCords.maxY;\r\n }\r\n }\r\n if (allowX) {\r\n if (this.isBeyondPossibleLeft(distance.x, possibleSwipeCords.minX)) {\r\n distance.x = possibleSwipeCords.minX;\r\n }\r\n else if (this.isBeyondPossibleRight(distance.x, possibleSwipeCords.maxX)) {\r\n distance.x = possibleSwipeCords.maxX;\r\n }\r\n }\r\n if (allowY) {\r\n this.top = distance.y;\r\n }\r\n else {\r\n distance.y = this.top;\r\n }\r\n if (allowX) {\r\n this.left = distance.x;\r\n }\r\n else {\r\n distance.x = this.left;\r\n }\r\n this.setZoomSwipeStyles(_LGel, distance);\r\n this.positionChanged = true;\r\n }\r\n };\r\n Zoom.prototype.getZoomSwipeCords = function (startCoords, endCoords, allowX, allowY, possibleSwipeCords) {\r\n var distance = {};\r\n if (allowY) {\r\n distance.y = this.top + (endCoords.y - startCoords.y);\r\n if (this.isBeyondPossibleTop(distance.y, possibleSwipeCords.minY)) {\r\n var diffMinY = possibleSwipeCords.minY - distance.y;\r\n distance.y = possibleSwipeCords.minY - diffMinY / 6;\r\n }\r\n else if (this.isBeyondPossibleBottom(distance.y, possibleSwipeCords.maxY)) {\r\n var diffMaxY = distance.y - possibleSwipeCords.maxY;\r\n distance.y = possibleSwipeCords.maxY + diffMaxY / 6;\r\n }\r\n }\r\n else {\r\n distance.y = this.top;\r\n }\r\n if (allowX) {\r\n distance.x = this.left + (endCoords.x - startCoords.x);\r\n if (this.isBeyondPossibleLeft(distance.x, possibleSwipeCords.minX)) {\r\n var diffMinX = possibleSwipeCords.minX - distance.x;\r\n distance.x = possibleSwipeCords.minX - diffMinX / 6;\r\n }\r\n else if (this.isBeyondPossibleRight(distance.x, possibleSwipeCords.maxX)) {\r\n var difMaxX = distance.x - possibleSwipeCords.maxX;\r\n distance.x = possibleSwipeCords.maxX + difMaxX / 6;\r\n }\r\n }\r\n else {\r\n distance.x = this.left;\r\n }\r\n return distance;\r\n };\r\n Zoom.prototype.isBeyondPossibleLeft = function (x, minX) {\r\n return x >= minX;\r\n };\r\n Zoom.prototype.isBeyondPossibleRight = function (x, maxX) {\r\n return x <= maxX;\r\n };\r\n Zoom.prototype.isBeyondPossibleTop = function (y, minY) {\r\n return y >= minY;\r\n };\r\n Zoom.prototype.isBeyondPossibleBottom = function (y, maxY) {\r\n return y <= maxY;\r\n };\r\n Zoom.prototype.isImageSlide = function (index) {\r\n var currentItem = this.core.galleryItems[index];\r\n return this.core.getSlideType(currentItem) === 'image';\r\n };\r\n Zoom.prototype.getPossibleSwipeDragCords = function (scale) {\r\n var $image = this.core\r\n .getSlideItem(this.core.index)\r\n .find('.lg-image')\r\n .first();\r\n var bottom = this.core.mediaContainerPosition.bottom;\r\n var imgRect = $image.get().getBoundingClientRect();\r\n var imageHeight = imgRect.height;\r\n var imageWidth = imgRect.width;\r\n if (scale) {\r\n imageHeight = imageHeight + scale * imageHeight;\r\n imageWidth = imageWidth + scale * imageWidth;\r\n }\r\n var minY = (imageHeight - this.containerRect.height) / 2;\r\n var maxY = (this.containerRect.height - imageHeight) / 2 + bottom;\r\n var minX = (imageWidth - this.containerRect.width) / 2;\r\n var maxX = (this.containerRect.width - imageWidth) / 2;\r\n var possibleSwipeCords = {\r\n minY: minY,\r\n maxY: maxY,\r\n minX: minX,\r\n maxX: maxX,\r\n };\r\n return possibleSwipeCords;\r\n };\r\n Zoom.prototype.setZoomSwipeStyles = function (LGel, distance) {\r\n LGel.css('transform', 'translate3d(' + distance.x + 'px, ' + distance.y + 'px, 0)');\r\n };\r\n Zoom.prototype.zoomSwipe = function () {\r\n var _this = this;\r\n var startCoords = {};\r\n var endCoords = {};\r\n var isMoved = false;\r\n // Allow x direction drag\r\n var allowX = false;\r\n // Allow Y direction drag\r\n var allowY = false;\r\n var startTime = new Date();\r\n var endTime = new Date();\r\n var possibleSwipeCords;\r\n var _LGel;\r\n var $item = this.core.getSlideItem(this.core.index);\r\n this.core.$inner.on('touchstart.lg', function (e) {\r\n // Allow zoom only on image\r\n if (!_this.isImageSlide(_this.core.index)) {\r\n return;\r\n }\r\n $item = _this.core.getSlideItem(_this.core.index);\r\n if ((_this.$LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target)) &&\r\n e.touches.length === 1 &&\r\n _this.core.outer.hasClass('lg-zoomed')) {\r\n e.preventDefault();\r\n startTime = new Date();\r\n _this.core.touchAction = 'zoomSwipe';\r\n _LGel = _this.core\r\n .getSlideItem(_this.core.index)\r\n .find('.lg-img-wrap')\r\n .first();\r\n var dragAllowedAxises = _this.getDragAllowedAxises(0);\r\n allowY = dragAllowedAxises.allowY;\r\n allowX = dragAllowedAxises.allowX;\r\n if (allowX || allowY) {\r\n startCoords = _this.getSwipeCords(e);\r\n }\r\n possibleSwipeCords = _this.getPossibleSwipeDragCords();\r\n // reset opacity and transition duration\r\n _this.core.outer.addClass('lg-zoom-dragging lg-zoom-drag-transition');\r\n }\r\n });\r\n this.core.$inner.on('touchmove.lg', function (e) {\r\n if (e.touches.length === 1 &&\r\n _this.core.touchAction === 'zoomSwipe' &&\r\n (_this.$LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target))) {\r\n e.preventDefault();\r\n _this.core.touchAction = 'zoomSwipe';\r\n endCoords = _this.getSwipeCords(e);\r\n var distance = _this.getZoomSwipeCords(startCoords, endCoords, allowX, allowY, possibleSwipeCords);\r\n if (Math.abs(endCoords.x - startCoords.x) > 15 ||\r\n Math.abs(endCoords.y - startCoords.y) > 15) {\r\n isMoved = true;\r\n _this.setZoomSwipeStyles(_LGel, distance);\r\n }\r\n }\r\n });\r\n this.core.$inner.on('touchend.lg', function (e) {\r\n if (_this.core.touchAction === 'zoomSwipe' &&\r\n (_this.$LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target))) {\r\n e.preventDefault();\r\n _this.core.touchAction = undefined;\r\n _this.core.outer.removeClass('lg-zoom-dragging');\r\n if (!isMoved) {\r\n return;\r\n }\r\n isMoved = false;\r\n endTime = new Date();\r\n var touchDuration = endTime.valueOf() - startTime.valueOf();\r\n _this.touchendZoom(startCoords, endCoords, allowX, allowY, touchDuration);\r\n }\r\n });\r\n };\r\n Zoom.prototype.zoomDrag = function () {\r\n var _this = this;\r\n var startCoords = {};\r\n var endCoords = {};\r\n var isDragging = false;\r\n var isMoved = false;\r\n // Allow x direction drag\r\n var allowX = false;\r\n // Allow Y direction drag\r\n var allowY = false;\r\n var startTime;\r\n var endTime;\r\n var possibleSwipeCords;\r\n var _LGel;\r\n this.core.outer.on('mousedown.lg.zoom', function (e) {\r\n // Allow zoom only on image\r\n if (!_this.isImageSlide(_this.core.index)) {\r\n return;\r\n }\r\n var $item = _this.core.getSlideItem(_this.core.index);\r\n if (_this.$LG(e.target).hasClass('lg-item') ||\r\n $item.get().contains(e.target)) {\r\n startTime = new Date();\r\n _LGel = _this.core\r\n .getSlideItem(_this.core.index)\r\n .find('.lg-img-wrap')\r\n .first();\r\n var dragAllowedAxises = _this.getDragAllowedAxises(0);\r\n allowY = dragAllowedAxises.allowY;\r\n allowX = dragAllowedAxises.allowX;\r\n if (_this.core.outer.hasClass('lg-zoomed')) {\r\n if (_this.$LG(e.target).hasClass('lg-object') &&\r\n (allowX || allowY)) {\r\n e.preventDefault();\r\n startCoords = _this.getDragCords(e);\r\n possibleSwipeCords = _this.getPossibleSwipeDragCords();\r\n isDragging = true;\r\n _this.core.outer\r\n .removeClass('lg-grab')\r\n .addClass('lg-grabbing lg-zoom-drag-transition lg-zoom-dragging');\r\n // reset opacity and transition duration\r\n }\r\n }\r\n }\r\n });\r\n this.$LG(window).on(\"mousemove.lg.zoom.global\" + this.core.lgId, function (e) {\r\n if (isDragging) {\r\n isMoved = true;\r\n endCoords = _this.getDragCords(e);\r\n var distance = _this.getZoomSwipeCords(startCoords, endCoords, allowX, allowY, possibleSwipeCords);\r\n _this.setZoomSwipeStyles(_LGel, distance);\r\n }\r\n });\r\n this.$LG(window).on(\"mouseup.lg.zoom.global\" + this.core.lgId, function (e) {\r\n if (isDragging) {\r\n endTime = new Date();\r\n isDragging = false;\r\n _this.core.outer.removeClass('lg-zoom-dragging');\r\n // Fix for chrome mouse move on click\r\n if (isMoved &&\r\n (startCoords.x !== endCoords.x ||\r\n startCoords.y !== endCoords.y)) {\r\n endCoords = _this.getDragCords(e);\r\n var touchDuration = endTime.valueOf() - startTime.valueOf();\r\n _this.touchendZoom(startCoords, endCoords, allowX, allowY, touchDuration);\r\n }\r\n isMoved = false;\r\n }\r\n _this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');\r\n });\r\n };\r\n Zoom.prototype.closeGallery = function () {\r\n this.resetZoom();\r\n this.zoomInProgress = false;\r\n };\r\n Zoom.prototype.destroy = function () {\r\n // Unbind all events added by lightGallery zoom plugin\r\n this.$LG(window).off(\".lg.zoom.global\" + this.core.lgId);\r\n this.core.LGel.off('.lg.zoom');\r\n this.core.LGel.off('.zoom');\r\n clearTimeout(this.zoomableTimeout);\r\n this.zoomableTimeout = false;\r\n };\r\n return Zoom;\r\n}());\n\nexport default Zoom;\n//# sourceMappingURL=lg-zoom.es5.js.map\n","/*!\n * Flickr's Justified Gallery [fjGallery] v2.2.0 (https://flickr-justified-gallery.nkdev.info)\n * Copyright 2024 nK \n * Licensed under MIT (https://github.com/nk-o/flickr-justified-gallery/blob/master/LICENSE)\n */\n/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher)\n * are most useful.\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through,\n * as-is, to `callback` when the throttled-function is executed.\n * @param {object} [options] - An object to configure options.\n * @param {boolean} [options.noTrailing] - Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds\n * while the throttled-function is being called. If noTrailing is false or unspecified, callback will be executed\n * one final time after the last throttled-function call. (After the throttled-function has not been called for\n * `delay` milliseconds, the internal counter is reset).\n * @param {boolean} [options.noLeading] - Optional, defaults to false. If noLeading is false, the first throttled-function call will execute callback\n * immediately. If noLeading is true, the first the callback execution will be skipped. It should be noted that\n * callback will never executed if both noLeading = true and noTrailing = true.\n * @param {boolean} [options.debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is\n * false (at end), schedule `callback` to execute after `delay` ms.\n *\n * @returns {Function} A new, throttled, function.\n */\nfunction throttle(delay, callback, options) {\n var _ref = options || {},\n _ref$noTrailing = _ref.noTrailing,\n noTrailing = _ref$noTrailing === void 0 ? false : _ref$noTrailing,\n _ref$noLeading = _ref.noLeading,\n noLeading = _ref$noLeading === void 0 ? false : _ref$noLeading,\n _ref$debounceMode = _ref.debounceMode,\n debounceMode = _ref$debounceMode === void 0 ? undefined : _ref$debounceMode;\n /*\n * After wrapper has stopped being called, this timeout ensures that\n * `callback` is executed at the proper times in `throttle` and `end`\n * debounce modes.\n */\n\n var timeoutID;\n var cancelled = false; // Keep track of the last time `callback` was executed.\n\n var lastExec = 0; // Function to clear existing timeout\n\n function clearExistingTimeout() {\n if (timeoutID) {\n clearTimeout(timeoutID);\n }\n } // Function to cancel next exec\n\n function cancel(options) {\n var _ref2 = options || {},\n _ref2$upcomingOnly = _ref2.upcomingOnly,\n upcomingOnly = _ref2$upcomingOnly === void 0 ? false : _ref2$upcomingOnly;\n clearExistingTimeout();\n cancelled = !upcomingOnly;\n }\n /*\n * The `wrapper` function encapsulates all of the throttling / debouncing\n * functionality and when executed will limit the rate at which `callback`\n * is executed.\n */\n\n function wrapper() {\n for (var _len = arguments.length, arguments_ = new Array(_len), _key = 0; _key < _len; _key++) {\n arguments_[_key] = arguments[_key];\n }\n var self = this;\n var elapsed = Date.now() - lastExec;\n if (cancelled) {\n return;\n } // Execute `callback` and update the `lastExec` timestamp.\n\n function exec() {\n lastExec = Date.now();\n callback.apply(self, arguments_);\n }\n /*\n * If `debounceMode` is true (at begin) this is used to clear the flag\n * to allow future `callback` executions.\n */\n\n function clear() {\n timeoutID = undefined;\n }\n if (!noLeading && debounceMode && !timeoutID) {\n /*\n * Since `wrapper` is being called for the first time and\n * `debounceMode` is true (at begin), execute `callback`\n * and noLeading != true.\n */\n exec();\n }\n clearExistingTimeout();\n if (debounceMode === undefined && elapsed > delay) {\n if (noLeading) {\n /*\n * In throttle mode with noLeading, if `delay` time has\n * been exceeded, update `lastExec` and schedule `callback`\n * to execute after `delay` ms.\n */\n lastExec = Date.now();\n if (!noTrailing) {\n timeoutID = setTimeout(debounceMode ? clear : exec, delay);\n }\n } else {\n /*\n * In throttle mode without noLeading, if `delay` time has been exceeded, execute\n * `callback`.\n */\n exec();\n }\n } else if (noTrailing !== true) {\n /*\n * In trailing throttle mode, since `delay` time has not been\n * exceeded, schedule `callback` to execute `delay` ms after most\n * recent execution.\n *\n * If `debounceMode` is true (at begin), schedule `clear` to execute\n * after `delay` ms.\n *\n * If `debounceMode` is false (at end), schedule `callback` to\n * execute after `delay` ms.\n */\n timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n }\n }\n wrapper.cancel = cancel; // Return the wrapper function.\n\n return wrapper;\n}\n\n/* eslint-disable no-undefined */\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the debounced-function is executed.\n * @param {object} [options] - An object to configure options.\n * @param {boolean} [options.atBegin] - Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n *\n * @returns {Function} A new, debounced function.\n */\n\nfunction debounce(delay, callback, options) {\n var _ref = options || {},\n _ref$atBegin = _ref.atBegin,\n atBegin = _ref$atBegin === void 0 ? false : _ref$atBegin;\n return throttle(delay, callback, {\n debounceMode: atBegin !== false\n });\n}\n\nvar rafSchd = function rafSchd(fn) {\n var lastArgs = [];\n var frameId = null;\n var wrapperFn = function wrapperFn() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n lastArgs = args;\n if (frameId) {\n return;\n }\n frameId = requestAnimationFrame(function () {\n frameId = null;\n fn.apply(void 0, lastArgs);\n });\n };\n wrapperFn.cancel = function () {\n if (!frameId) {\n return;\n }\n cancelAnimationFrame(frameId);\n frameId = null;\n };\n return wrapperFn;\n};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\n/**\n * Row\n * Wrapper for each row in a justified layout.\n * Stores relevant values and provides methods for calculating layout of individual rows.\n *\n * @param {Object} layoutConfig - The same as that passed\n * @param {Object} Initialization parameters. The following are all required:\n * @param params.index {Number} The index of this row\n * @param params.top {Number} Top of row, relative to container\n * @param params.left {Number} Left side of row relative to container (equal to container left padding)\n * @param params.width {Number} Width of row, not including container padding\n * @param params.spacing {Number} Horizontal spacing between items\n * @param params.targetRowHeight {Number} Layout algorithm will aim for this row height\n * @param params.targetRowHeightTolerance {Number} Row heights may vary +/- (`targetRowHeight` x `targetRowHeightTolerance`)\n * @param params.edgeCaseMinRowHeight {Number} Absolute minimum row height for edge cases that cannot be resolved within tolerance.\n * @param params.edgeCaseMaxRowHeight {Number} Absolute maximum row height for edge cases that cannot be resolved within tolerance.\n * @param params.isBreakoutRow {Boolean} Is this row in particular one of those breakout rows? Always false if it's not that kind of photo list\n * @param params.widowLayoutStyle {String} If widows are visible, how should they be laid out?\n * @constructor\n */\nconst Row = function (params) {\n // The index of this row\n this.index = params.index;\n\n // Top of row, relative to container\n this.top = params.top;\n\n // Left side of row relative to container (equal to container left padding)\n this.left = params.left;\n\n // Width of row, not including container padding\n this.width = params.width;\n\n // Horizontal spacing between items\n this.spacing = params.spacing;\n\n // Row height calculation values\n this.targetRowHeight = params.targetRowHeight;\n this.targetRowHeightTolerance = params.targetRowHeightTolerance;\n this.minAspectRatio = this.width / params.targetRowHeight * (1 - params.targetRowHeightTolerance);\n this.maxAspectRatio = this.width / params.targetRowHeight * (1 + params.targetRowHeightTolerance);\n\n // Edge case row height minimum/maximum\n this.edgeCaseMinRowHeight = params.edgeCaseMinRowHeight;\n this.edgeCaseMaxRowHeight = params.edgeCaseMaxRowHeight;\n\n // Widow layout direction\n this.widowLayoutStyle = params.widowLayoutStyle;\n\n // Full width breakout rows\n this.isBreakoutRow = params.isBreakoutRow;\n\n // Store layout data for each item in row\n this.items = [];\n\n // Height remains at 0 until it's been calculated\n this.height = 0;\n};\nRow.prototype = {\n /**\n * Attempt to add a single item to the row.\n * This is the heart of the justified algorithm.\n * This method is direction-agnostic; it deals only with sizes, not positions.\n *\n * If the item fits in the row, without pushing row height beyond min/max tolerance,\n * the item is added and the method returns true.\n *\n * If the item leaves row height too high, there may be room to scale it down and add another item.\n * In this case, the item is added and the method returns true, but the row is incomplete.\n *\n * If the item leaves row height too short, there are too many items to fit within tolerance.\n * The method will either accept or reject the new item, favoring the resulting row height closest to within tolerance.\n * If the item is rejected, left/right padding will be required to fit the row height within tolerance;\n * if the item is accepted, top/bottom cropping will be required to fit the row height within tolerance.\n *\n * @method addItem\n * @param itemData {Object} Item layout data, containing item aspect ratio.\n * @return {Boolean} True if successfully added; false if rejected.\n */\n addItem: function (itemData) {\n const newItems = this.items.concat(itemData);\n // Calculate aspect ratios for items only; exclude spacing\n const rowWidthWithoutSpacing = this.width - (newItems.length - 1) * this.spacing;\n const newAspectRatio = newItems.reduce(function (sum, item) {\n return sum + item.aspectRatio;\n }, 0);\n const targetAspectRatio = rowWidthWithoutSpacing / this.targetRowHeight;\n let previousRowWidthWithoutSpacing;\n let previousAspectRatio;\n let previousTargetAspectRatio;\n\n // Handle big full-width breakout photos if we're doing them\n if (this.isBreakoutRow) {\n // Only do it if there's no other items in this row\n if (this.items.length === 0) {\n // Only go full width if this photo is a square or landscape\n if (itemData.aspectRatio >= 1) {\n // Close out the row with a full width photo\n this.items.push(itemData);\n this.completeLayout(rowWidthWithoutSpacing / itemData.aspectRatio, \"justify\");\n return true;\n }\n }\n }\n if (newAspectRatio < this.minAspectRatio) {\n // New aspect ratio is too narrow / scaled row height is too tall.\n // Accept this item and leave row open for more items.\n\n this.items.push(Object.assign({}, itemData));\n return true;\n } else if (newAspectRatio > this.maxAspectRatio) {\n // New aspect ratio is too wide / scaled row height will be too short.\n // Accept item if the resulting aspect ratio is closer to target than it would be without the item.\n // NOTE: Any row that falls into this block will require cropping/padding on individual items.\n\n if (this.items.length === 0) {\n // When there are no existing items, force acceptance of the new item and complete the layout.\n // This is the pano special case.\n this.items.push(Object.assign({}, itemData));\n this.completeLayout(rowWidthWithoutSpacing / newAspectRatio, \"justify\");\n return true;\n }\n\n // Calculate width/aspect ratio for row before adding new item\n previousRowWidthWithoutSpacing = this.width - (this.items.length - 1) * this.spacing;\n previousAspectRatio = this.items.reduce(function (sum, item) {\n return sum + item.aspectRatio;\n }, 0);\n previousTargetAspectRatio = previousRowWidthWithoutSpacing / this.targetRowHeight;\n if (Math.abs(newAspectRatio - targetAspectRatio) > Math.abs(previousAspectRatio - previousTargetAspectRatio)) {\n // Row with new item is us farther away from target than row without; complete layout and reject item.\n this.completeLayout(previousRowWidthWithoutSpacing / previousAspectRatio, \"justify\");\n return false;\n } else {\n // Row with new item is us closer to target than row without;\n // accept the new item and complete the row layout.\n this.items.push(Object.assign({}, itemData));\n this.completeLayout(rowWidthWithoutSpacing / newAspectRatio, \"justify\");\n return true;\n }\n } else {\n // New aspect ratio / scaled row height is within tolerance;\n // accept the new item and complete the row layout.\n this.items.push(Object.assign({}, itemData));\n this.completeLayout(rowWidthWithoutSpacing / newAspectRatio, \"justify\");\n return true;\n }\n },\n /**\n * Check if a row has completed its layout.\n *\n * @method isLayoutComplete\n * @return {Boolean} True if complete; false if not.\n */\n isLayoutComplete: function () {\n return this.height > 0;\n },\n /**\n * Set row height and compute item geometry from that height.\n * Will justify items within the row unless instructed not to.\n *\n * @method completeLayout\n * @param newHeight {Number} Set row height to this value.\n * @param widowLayoutStyle {String} How should widows display? Supported: left | justify | center\n */\n completeLayout: function (newHeight, widowLayoutStyle) {\n let itemWidthSum = this.left;\n const rowWidthWithoutSpacing = this.width - (this.items.length - 1) * this.spacing;\n let clampedToNativeRatio;\n let clampedHeight;\n let errorWidthPerItem;\n let roundedCumulativeErrors;\n let singleItemGeometry;\n let centerOffset;\n\n // Justify unless explicitly specified otherwise.\n if (typeof widowLayoutStyle === \"undefined\" || [\"justify\", \"center\", \"left\"].indexOf(widowLayoutStyle) < 0) {\n widowLayoutStyle = \"left\";\n }\n\n // Clamp row height to edge case minimum/maximum.\n clampedHeight = Math.max(this.edgeCaseMinRowHeight, Math.min(newHeight, this.edgeCaseMaxRowHeight));\n if (newHeight !== clampedHeight) {\n // If row height was clamped, the resulting row/item aspect ratio will be off,\n // so force it to fit the width (recalculate aspectRatio to match clamped height).\n // NOTE: this will result in cropping/padding commensurate to the amount of clamping.\n this.height = clampedHeight;\n clampedToNativeRatio = rowWidthWithoutSpacing / clampedHeight / (rowWidthWithoutSpacing / newHeight);\n } else {\n // If not clamped, leave ratio at 1.0.\n this.height = newHeight;\n clampedToNativeRatio = 1.0;\n }\n\n // Compute item geometry based on newHeight.\n this.items.forEach(function (item) {\n item.row = this.index;\n item.top = this.top;\n item.width = item.aspectRatio * this.height * clampedToNativeRatio;\n item.height = this.height;\n\n // Left-to-right.\n // TODO right to left\n // item.left = this.width - itemWidthSum - item.width;\n item.left = itemWidthSum;\n\n // Increment width.\n itemWidthSum += item.width + this.spacing;\n }, this);\n\n // If specified, ensure items fill row and distribute error\n // caused by rounding width and height across all items.\n if (widowLayoutStyle === \"justify\") {\n itemWidthSum -= this.spacing + this.left;\n errorWidthPerItem = (itemWidthSum - this.width) / this.items.length;\n roundedCumulativeErrors = this.items.map(function (item, i) {\n return Math.round((i + 1) * errorWidthPerItem);\n });\n if (this.items.length === 1) {\n // For rows with only one item, adjust item width to fill row.\n singleItemGeometry = this.items[0];\n singleItemGeometry.width -= Math.round(errorWidthPerItem);\n } else {\n // For rows with multiple items, adjust item width and shift items to fill the row,\n // while maintaining equal spacing between items in the row.\n this.items.forEach(function (item, i) {\n if (i > 0) {\n item.left -= roundedCumulativeErrors[i - 1];\n item.width -= roundedCumulativeErrors[i] - roundedCumulativeErrors[i - 1];\n } else {\n item.width -= roundedCumulativeErrors[i];\n }\n });\n }\n } else if (widowLayoutStyle === \"center\") {\n // Center widows\n centerOffset = (this.width - itemWidthSum) / 2;\n this.items.forEach(function (item) {\n item.left += centerOffset + this.spacing;\n }, this);\n }\n },\n /**\n * Force completion of row layout with current items.\n *\n * @method forceComplete\n * @param fitToWidth {Boolean} Stretch current items to fill the row width.\n * This will likely result in padding.\n * @param fitToWidth {Number}\n */\n forceComplete: function (fitToWidth, rowHeight) {\n // TODO Handle fitting to width\n // var rowWidthWithoutSpacing = this.width - (this.items.length - 1) * this.spacing,\n // \tcurrentAspectRatio = this.items.reduce(function (sum, item) {\n // \t\treturn sum + item.aspectRatio;\n // \t}, 0);\n\n if (typeof rowHeight === \"number\") {\n this.completeLayout(rowHeight, this.widowLayoutStyle);\n } else {\n // Complete using target row height.\n this.completeLayout(this.targetRowHeight, this.widowLayoutStyle);\n }\n },\n /**\n * Return layout data for items within row.\n * Note: returns actual list, not a copy.\n *\n * @method getItems\n * @return Layout data for items within row.\n */\n getItems: function () {\n return this.items;\n }\n};\n\n/*!\n * Copyright 2019 SmugMug, Inc. | Copyright 2024 nK\n * Licensed under the terms of the MIT license. Please see LICENSE file in the project root for terms.\n * @license\n */\n\n/**\n * Create a new, empty row.\n *\n * @method createNewRow\n * @param layoutConfig {Object} The layout configuration\n * @param layoutData {Object} The current state of the layout\n * @return A new, empty row of the type specified by this layout.\n */\nfunction createNewRow(layoutConfig, layoutData) {\n let isBreakoutRow;\n\n // Work out if this is a full width breakout row\n if (layoutConfig.fullWidthBreakoutRowCadence !== false) {\n if ((layoutData._rows.length + 1) % layoutConfig.fullWidthBreakoutRowCadence === 0) {\n isBreakoutRow = true;\n }\n }\n return new Row({\n index: layoutData._rows.length,\n top: layoutData._containerHeight,\n left: layoutConfig.containerPadding.left,\n width: layoutConfig.containerWidth - layoutConfig.containerPadding.left - layoutConfig.containerPadding.right,\n spacing: layoutConfig.boxSpacing.horizontal,\n targetRowHeight: layoutConfig.targetRowHeight,\n targetRowHeightTolerance: layoutConfig.targetRowHeightTolerance,\n edgeCaseMinRowHeight: layoutConfig.edgeCaseMinRowHeight * layoutConfig.targetRowHeight,\n edgeCaseMaxRowHeight: layoutConfig.edgeCaseMaxRowHeight * layoutConfig.targetRowHeight,\n rightToLeft: false,\n isBreakoutRow: isBreakoutRow,\n widowLayoutStyle: layoutConfig.widowLayoutStyle\n });\n}\n\n/**\n * Add a completed row to the layout.\n * Note: the row must have already been completed.\n *\n * @method addRow\n * @param layoutConfig {Object} The layout configuration\n * @param layoutData {Object} The current state of the layout\n * @param row {Row} The row to add.\n * @return {Array} Each item added to the row.\n */\nfunction addRow(layoutConfig, layoutData, row) {\n layoutData._rows.push(row);\n layoutData._layoutItems = layoutData._layoutItems.concat(row.getItems());\n\n // Increment the container height\n layoutData._containerHeight += row.height + layoutConfig.boxSpacing.vertical;\n return row.items;\n}\n\n/**\n * Calculate the current layout for all items in the list that require layout.\n * \"Layout\" means geometry: position within container and size\n *\n * @method computeLayout\n * @param layoutConfig {Object} The layout configuration\n * @param layoutData {Object} The current state of the layout\n * @param itemLayoutData {Array} Array of items to lay out, with data required to lay out each item\n * @return {Object} The newly-calculated layout, containing the new container height, and lists of layout items\n */\nfunction computeLayout(layoutConfig, layoutData, itemLayoutData) {\n let laidOutItems = [];\n let itemAdded;\n let currentRow;\n let nextToLastRowHeight;\n\n // Apply forced aspect ratio if specified, and set a flag.\n if (layoutConfig.forceAspectRatio) {\n itemLayoutData.forEach(function (itemData) {\n itemData.forcedAspectRatio = true;\n itemData.aspectRatio = layoutConfig.forceAspectRatio;\n });\n }\n\n // Loop through the items\n itemLayoutData.some(function (itemData, i) {\n if (isNaN(itemData.aspectRatio)) {\n throw new Error(\"Item \" + i + \" has an invalid aspect ratio\");\n }\n\n // If not currently building up a row, make a new one.\n if (!currentRow) {\n currentRow = createNewRow(layoutConfig, layoutData);\n }\n\n // Attempt to add item to the current row.\n itemAdded = currentRow.addItem(itemData);\n if (currentRow.isLayoutComplete()) {\n // Row is filled; add it and start a new one\n laidOutItems = laidOutItems.concat(addRow(layoutConfig, layoutData, currentRow));\n if (layoutData._rows.length >= layoutConfig.maxNumRows) {\n currentRow = null;\n return true;\n }\n currentRow = createNewRow(layoutConfig, layoutData);\n\n // Item was rejected; add it to its own row\n if (!itemAdded) {\n itemAdded = currentRow.addItem(itemData);\n if (currentRow.isLayoutComplete()) {\n // If the rejected item fills a row on its own, add the row and start another new one\n laidOutItems = laidOutItems.concat(addRow(layoutConfig, layoutData, currentRow));\n if (layoutData._rows.length >= layoutConfig.maxNumRows) {\n currentRow = null;\n return true;\n }\n currentRow = createNewRow(layoutConfig, layoutData);\n }\n }\n }\n });\n\n // Handle any leftover content (orphans) depending on where they lie\n // in this layout update, and in the total content set.\n if (currentRow && currentRow.getItems().length && layoutConfig.showWidows) {\n // Last page of all content or orphan suppression is suppressed; lay out orphans.\n if (layoutData._rows.length) {\n // Only Match previous row's height if it exists and it isn't a breakout row\n if (layoutData._rows[layoutData._rows.length - 1].isBreakoutRow) {\n nextToLastRowHeight = layoutData._rows[layoutData._rows.length - 1].targetRowHeight;\n } else {\n nextToLastRowHeight = layoutData._rows[layoutData._rows.length - 1].height;\n }\n currentRow.forceComplete(false, nextToLastRowHeight);\n } else {\n // ...else use target height if there is no other row height to reference.\n currentRow.forceComplete(false);\n }\n laidOutItems = laidOutItems.concat(addRow(layoutConfig, layoutData, currentRow));\n layoutConfig._widowCount = currentRow.getItems().length;\n }\n\n // We need to clean up the bottom container padding\n // First remove the height added for box spacing\n layoutData._containerHeight = layoutData._containerHeight - layoutConfig.boxSpacing.vertical;\n // Then add our bottom container padding\n layoutData._containerHeight = layoutData._containerHeight + layoutConfig.containerPadding.bottom;\n return {\n containerHeight: layoutData._containerHeight,\n widowCount: layoutConfig._widowCount,\n boxes: layoutData._layoutItems\n };\n}\n\n/**\n * Takes in a bunch of box data and config. Returns\n * geometry to lay them out in a justified view.\n *\n * @method covertSizesToAspectRatios\n * @param sizes {Array} Array of objects with widths and heights\n * @return {Array} A list of aspect ratios\n */\nfunction index(input, config) {\n let layoutConfig = {};\n const layoutData = {};\n\n // Defaults\n const defaults = {\n containerWidth: 1060,\n containerPadding: 10,\n boxSpacing: 10,\n targetRowHeight: 320,\n targetRowHeightTolerance: 0.25,\n edgeCaseMinRowHeight: 0.5,\n edgeCaseMaxRowHeight: 2.5,\n maxNumRows: Number.POSITIVE_INFINITY,\n forceAspectRatio: false,\n showWidows: true,\n fullWidthBreakoutRowCadence: false,\n widowLayoutStyle: \"left\"\n };\n const containerPadding = {};\n const boxSpacing = {};\n config = config || {};\n\n // Merge defaults and config passed in\n layoutConfig = Object.assign(defaults, config);\n\n // Sort out padding and spacing values\n containerPadding.top = !isNaN(parseFloat(layoutConfig.containerPadding.top)) ? layoutConfig.containerPadding.top : layoutConfig.containerPadding;\n containerPadding.right = !isNaN(parseFloat(layoutConfig.containerPadding.right)) ? layoutConfig.containerPadding.right : layoutConfig.containerPadding;\n containerPadding.bottom = !isNaN(parseFloat(layoutConfig.containerPadding.bottom)) ? layoutConfig.containerPadding.bottom : layoutConfig.containerPadding;\n containerPadding.left = !isNaN(parseFloat(layoutConfig.containerPadding.left)) ? layoutConfig.containerPadding.left : layoutConfig.containerPadding;\n boxSpacing.horizontal = !isNaN(parseFloat(layoutConfig.boxSpacing.horizontal)) ? layoutConfig.boxSpacing.horizontal : layoutConfig.boxSpacing;\n boxSpacing.vertical = !isNaN(parseFloat(layoutConfig.boxSpacing.vertical)) ? layoutConfig.boxSpacing.vertical : layoutConfig.boxSpacing;\n layoutConfig.containerPadding = containerPadding;\n layoutConfig.boxSpacing = boxSpacing;\n\n // Local\n layoutData._layoutItems = [];\n layoutData._awakeItems = [];\n layoutData._inViewportItems = [];\n layoutData._leadingOrphans = [];\n layoutData._trailingOrphans = [];\n layoutData._containerHeight = layoutConfig.containerPadding.top;\n layoutData._rows = [];\n layoutData._orphans = [];\n layoutConfig._widowCount = 0;\n\n // Convert widths and heights to aspect ratios if we need to\n return computeLayout(layoutConfig, layoutData, input.map(function (item) {\n if (item.width && item.height) {\n return {\n aspectRatio: item.width / item.height\n };\n } else {\n return {\n aspectRatio: item\n };\n }\n }));\n}\nvar betterJustifiedLayout = index;\nvar justifiedLayout = /*@__PURE__*/getDefaultExportFromCjs(betterJustifiedLayout);\n\nfunction ready(callback) {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n // Already ready or interactive, execute callback\n callback();\n } else {\n document.addEventListener('DOMContentLoaded', callback, {\n capture: true,\n once: true,\n passive: true\n });\n }\n}\n\n/* eslint-disable import/no-mutable-exports */\n/* eslint-disable no-restricted-globals */\nlet win;\nif (typeof window !== 'undefined') {\n win = window;\n} else if (typeof global !== 'undefined') {\n win = global;\n} else if (typeof self !== 'undefined') {\n win = self;\n} else {\n win = {};\n}\nvar global$1 = win;\n\n// get image dimensions\n// thanks https://gist.github.com/dimsemenov/5382856\nfunction getImgDimensions(img, cb) {\n let interval;\n let hasSize = false;\n let addedListeners = false;\n const onHasSize = () => {\n if (hasSize) {\n cb(hasSize);\n return;\n }\n\n // check for non-zero, non-undefined naturalWidth\n if (!img.naturalWidth) {\n return;\n }\n hasSize = {\n width: img.naturalWidth,\n height: img.naturalHeight\n };\n cb(hasSize);\n clearInterval(interval);\n if (addedListeners) {\n // eslint-disable-next-line no-use-before-define\n removeListeners();\n }\n };\n const onLoaded = () => {\n onHasSize();\n };\n const onError = () => {\n onHasSize();\n };\n const checkSize = () => {\n if (img.naturalWidth > 0) {\n onHasSize();\n }\n };\n const addListeners = () => {\n addedListeners = true;\n img.addEventListener('load', onLoaded);\n img.addEventListener('error', onError);\n };\n const removeListeners = () => {\n addedListeners = false;\n img.removeEventListener('load', onLoaded);\n img.removeEventListener('error', onError);\n };\n checkSize();\n if (!hasSize) {\n addListeners();\n interval = setInterval(checkSize, 100);\n }\n}\n\n// list with all fjGallery instances\n// need to render all in one scroll/resize event\nconst fjGalleryList = [];\nconst updateFjGallery = /*#__PURE__*/rafSchd(() => {\n fjGalleryList.forEach(item => {\n item.resize();\n });\n});\nglobal$1.addEventListener('resize', updateFjGallery);\nglobal$1.addEventListener('orientationchange', updateFjGallery);\nglobal$1.addEventListener('load', updateFjGallery);\nready(() => {\n updateFjGallery();\n});\nlet instanceID = 0;\n\n// fjGallery class\nclass FJGallery {\n constructor(container, userOptions) {\n const self = this;\n self.instanceID = instanceID;\n instanceID += 1;\n self.$container = container;\n self.images = [];\n self.defaults = {\n itemSelector: '.fj-gallery-item',\n imageSelector: 'img',\n gutter: 10,\n // supports object like `{ horizontal: 10, vertical: 10 }`.\n rowHeight: 320,\n rowHeightTolerance: 0.25,\n // [0, 1]\n maxRowsCount: Number.POSITIVE_INFINITY,\n edgeCaseMinRowHeight: 0.5,\n edgeCaseMaxRowHeight: 2.5,\n lastRow: 'left',\n // left, center, right, hide\n transitionDuration: '0.3s',\n calculateItemsHeight: false,\n resizeDebounce: 100,\n isRtl: self.css(self.$container, 'direction') === 'rtl',\n // events\n onInit: null,\n // function() {}\n onDestroy: null,\n // function() {}\n onAppendImages: null,\n // function() {}\n onBeforeJustify: null,\n // function() {}\n onJustify: null // function() {}\n };\n\n // prepare data-options\n const dataOptions = self.$container.dataset || {};\n const pureDataOptions = {};\n Object.keys(dataOptions).forEach(key => {\n const loweCaseOption = key.substr(0, 1).toLowerCase() + key.substr(1);\n if (loweCaseOption && typeof self.defaults[loweCaseOption] !== 'undefined') {\n pureDataOptions[loweCaseOption] = dataOptions[key];\n }\n });\n self.options = {\n ...self.defaults,\n ...pureDataOptions,\n ...userOptions\n };\n self.pureOptions = {\n ...self.options\n };\n\n // debounce for resize\n self.resize = debounce(self.options.resizeDebounce, self.resize);\n self.justify = rafSchd(self.justify.bind(self));\n self.init();\n }\n\n // add styles to element\n // eslint-disable-next-line class-methods-use-this\n css(el, styles) {\n if (typeof styles === 'string') {\n return global$1.getComputedStyle(el).getPropertyValue(styles);\n }\n Object.keys(styles).forEach(key => {\n el.style[key] = styles[key];\n });\n return el;\n }\n\n // set temporary transition with event listener\n applyTransition($item, properties) {\n const self = this;\n\n // Remove previous event listener\n self.onTransitionEnd($item)();\n\n // Add transitions\n self.css($item, {\n 'transition-property': properties.join(', '),\n 'transition-duration': self.options.transitionDuration\n });\n\n // Add event listener\n $item.addEventListener('transitionend', self.onTransitionEnd($item, properties), false);\n }\n onTransitionEnd($item) {\n const self = this;\n return () => {\n self.css($item, {\n 'transition-property': '',\n 'transition-duration': ''\n });\n $item.removeEventListener('transitionend', self.onTransitionEnd($item));\n };\n }\n\n // add to fjGallery instances list\n addToFjGalleryList() {\n fjGalleryList.push(this);\n updateFjGallery();\n }\n\n // remove from fjGallery instances list\n removeFromFjGalleryList() {\n const self = this;\n fjGalleryList.forEach((item, key) => {\n if (item.instanceID === self.instanceID) {\n fjGalleryList.splice(key, 1);\n }\n });\n }\n init() {\n const self = this;\n self.appendImages(self.$container.querySelectorAll(self.options.itemSelector));\n self.addToFjGalleryList();\n\n // call onInit event\n if (self.options.onInit) {\n self.options.onInit.call(self);\n }\n }\n\n // append images\n appendImages($images) {\n const self = this;\n\n // check if jQuery\n if (global$1.jQuery && $images instanceof global$1.jQuery) {\n $images = $images.get();\n }\n if (!$images || !$images.length) {\n return;\n }\n $images.forEach($item => {\n // if $images is jQuery, for some reason in this array there is undefined item, that not a DOM,\n // so we need to check for $item.querySelector.\n if ($item && !$item.fjGalleryImage && $item.querySelector) {\n const $image = $item.querySelector(self.options.imageSelector);\n if ($image) {\n $item.fjGalleryImage = self;\n const data = {\n $item,\n $image,\n width: parseFloat($image.getAttribute('width')) || false,\n height: parseFloat($image.getAttribute('height')) || false,\n loadSizes() {\n const itemData = this;\n getImgDimensions($image, dimensions => {\n if (itemData.width !== dimensions.width || itemData.height !== dimensions.height) {\n itemData.width = dimensions.width;\n itemData.height = dimensions.height;\n self.resize();\n }\n });\n }\n };\n data.loadSizes();\n self.images.push(data);\n }\n }\n });\n\n // call onAppendImages event\n if (self.options.onAppendImages) {\n self.options.onAppendImages.call(self, [$images]);\n }\n self.justify();\n }\n\n // justify images\n justify() {\n const self = this;\n const justifyArray = [];\n self.justifyCount = (self.justifyCount || 0) + 1;\n\n // call onBeforeJustify event\n if (self.options.onBeforeJustify) {\n self.options.onBeforeJustify.call(self);\n }\n self.images.forEach(data => {\n if (data.width && data.height) {\n justifyArray.push(data.width / data.height);\n }\n });\n const justifiedOptions = {\n containerWidth: self.$container.getBoundingClientRect().width,\n containerPadding: {\n top: parseFloat(self.css(self.$container, 'padding-top')) || 0,\n right: parseFloat(self.css(self.$container, 'padding-right')) || 0,\n bottom: parseFloat(self.css(self.$container, 'padding-bottom')) || 0,\n left: parseFloat(self.css(self.$container, 'padding-left')) || 0\n },\n boxSpacing: self.options.gutter,\n targetRowHeight: self.options.rowHeight,\n targetRowHeightTolerance: self.options.rowHeightTolerance,\n maxNumRows: self.options.maxRowsCount,\n edgeCaseMinRowHeight: self.options.edgeCaseMinRowHeight,\n edgeCaseMaxRowHeight: self.options.edgeCaseMaxRowHeight,\n showWidows: self.options.lastRow !== 'hide'\n };\n const justifiedData = justifiedLayout(justifyArray, justifiedOptions);\n\n // Align last row\n if (justifiedData.widowCount && (self.options.lastRow === 'center' || self.options.lastRow === 'right')) {\n const lastItemData = justifiedData.boxes[justifiedData.boxes.length - 1];\n let gapSize = justifiedOptions.containerWidth - lastItemData.width - lastItemData.left;\n if (self.options.lastRow === 'center') {\n gapSize /= 2;\n }\n if (self.options.lastRow === 'right') {\n gapSize -= justifiedOptions.containerPadding.right;\n }\n for (let i = 1; i <= justifiedData.widowCount; i += 1) {\n justifiedData.boxes[justifiedData.boxes.length - i].left = justifiedData.boxes[justifiedData.boxes.length - i].left + gapSize;\n }\n }\n\n // RTL compatibility\n if (self.options.isRtl) {\n justifiedData.boxes.forEach((boxData, i) => {\n justifiedData.boxes[i].left = justifiedOptions.containerWidth - justifiedData.boxes[i].left - justifiedData.boxes[i].width - justifiedOptions.containerPadding.right + justifiedOptions.containerPadding.left;\n });\n }\n let i = 0;\n let additionalTopOffset = 0;\n const rowsMaxHeight = {};\n\n // Set image sizes.\n self.images.forEach((data, imgI) => {\n if (justifiedData.boxes[i] && data.width && data.height) {\n // calculate additional offset based on actual items height.\n if (self.options.calculateItemsHeight && typeof rowsMaxHeight[justifiedData.boxes[i].row] === 'undefined' && Object.keys(rowsMaxHeight).length) {\n additionalTopOffset += rowsMaxHeight[Object.keys(rowsMaxHeight).pop()] - justifiedData.boxes[imgI - 1].height;\n }\n if (self.options.transitionDuration && self.justifyCount > 1) {\n self.applyTransition(data.$item, ['transform']);\n }\n self.css(data.$item, {\n display: '',\n position: 'absolute',\n transform: `translateX(${justifiedData.boxes[i].left}px) translateY(${justifiedData.boxes[i].top + additionalTopOffset}px) translateZ(0)`,\n width: `${justifiedData.boxes[i].width}px`\n });\n\n // calculate actual items height.\n if (self.options.calculateItemsHeight) {\n const rect = data.$item.getBoundingClientRect();\n if (typeof rowsMaxHeight[justifiedData.boxes[i].row] === 'undefined' || rowsMaxHeight[justifiedData.boxes[i].row] < rect.height) {\n rowsMaxHeight[justifiedData.boxes[i].row] = rect.height;\n }\n }\n i += 1;\n } else {\n self.css(data.$item, {\n display: 'none'\n });\n }\n });\n\n // increase additional offset based on the latest row items height.\n if (self.options.calculateItemsHeight && Object.keys(rowsMaxHeight).length) {\n additionalTopOffset += rowsMaxHeight[Object.keys(rowsMaxHeight).pop()] - justifiedData.boxes[justifiedData.boxes.length - 1].height;\n }\n if (self.options.transitionDuration) {\n self.applyTransition(self.$container, ['height']);\n }\n\n // Set container height.\n self.css(self.$container, {\n height: `${justifiedData.containerHeight + additionalTopOffset}px`\n });\n\n // call onJustify event\n if (self.options.onJustify) {\n self.options.onJustify.call(self);\n }\n }\n\n // update options and resize gallery items\n updateOptions(options) {\n const self = this;\n self.options = {\n ...self.options,\n ...options\n };\n self.justify();\n }\n destroy() {\n const self = this;\n self.removeFromFjGalleryList();\n self.justifyCount = 0;\n\n // call onDestroy event\n if (self.options.onDestroy) {\n self.options.onDestroy.call(self);\n }\n\n // remove styles.\n self.css(self.$container, {\n height: '',\n transition: ''\n });\n self.images.forEach(data => {\n self.css(data.$item, {\n position: '',\n transform: '',\n transition: '',\n width: '',\n height: ''\n });\n });\n\n // delete fjGalleryImage instance from images\n self.images.forEach(val => {\n delete val.$item.fjGalleryImage;\n });\n\n // delete fjGallery instance from container\n delete self.$container.fjGallery;\n }\n resize() {\n const self = this;\n self.justify();\n }\n}\n\n// global definition\nconst fjGallery = function (items, options, ...args) {\n // check for dom element\n // thanks: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object\n if (typeof HTMLElement === 'object' ? items instanceof HTMLElement : items && typeof items === 'object' && items !== null && items.nodeType === 1 && typeof items.nodeName === 'string') {\n items = [items];\n }\n const len = items.length;\n let k = 0;\n let ret;\n for (k; k < len; k += 1) {\n if (typeof options === 'object' || typeof options === 'undefined') {\n if (!items[k].fjGallery) {\n // eslint-disable-next-line new-cap\n items[k].fjGallery = new FJGallery(items[k], options);\n }\n } else if (items[k].fjGallery) {\n // eslint-disable-next-line prefer-spread\n ret = items[k].fjGallery[options].apply(items[k].fjGallery, args);\n }\n if (typeof ret !== 'undefined') {\n return ret;\n }\n }\n return items;\n};\nfjGallery.constructor = FJGallery;\n\nexport { fjGallery as default };\n//# sourceMappingURL=fjGallery.esm.js.map\n","import lightGallery from 'lightgallery';\r\n// Plugins\r\nimport lgThumbnail from 'lightgallery/plugins/thumbnail'\r\nimport lgZoom from 'lightgallery/plugins/zoom'\r\nimport fjGallery from \"flickr-justified-gallery\";\r\nimport 'lightgallery/css/lightgallery-bundle.min.css';\r\n\r\nexport default () => {\r\n let lightGalleryItems = document.querySelectorAll(\".fj-gallery\");\r\n fjGallery(lightGalleryItems, {\r\n itemSelector: '.fj-gallery-item'\r\n });\r\n\r\n lightGalleryItems.forEach((el) => {\r\n // light gallery //\r\n lightGallery(el, {\r\n plugins: [lgZoom, lgThumbnail],\r\n licenseKey: 'A1051E09-C24D-4865-9682-676083E8061C',\r\n speed: 500,\r\n });\r\n });\r\n};\r\n"],"names":["__assign","s","n","p","__spreadArrays","i","il","r","k","a","j","jl","lGEvents","lightGalleryCoreSettings","initLgPolyfills","CustomEvent","event","params","evt","lgQuery","selector","c","v","context","fl","func","el","cssProperty","value","property","group1","eventName","eventNamespace","e","attr","$LG","index","attributes","attrs","className","wrapper","classNames","attribute","_this","events","listener","detail","customEvent","url","res","html","scrollTop","scrollLeft","rect","bodyMarginLeft","style","defaultDynamicOptions","convertToData","g","utils","container","spacing","defaultLgSize","LGel","lgSize","isResponsiveSizes","wWidth","size_1","responsiveWidth","size","width","height","cWidth","cHeight","maxWidth","maxHeight","ratio","top","bottom","imageSize","containerRect","wHeight","elWidth","elHeight","elStyle","x","y","scX","scY","transform","iframeWidth","iframeHeight","iframeMaxWidth","iframeMaxHeight","src","iframeTitle","title","altAttr","srcset","sizes","sources","srcsetAttr","sizesAttr","imgMarkup","sourceTag","sourceObj","source","key","srcItms","rsWidth","rsSrc","_src","img","_poster","dummyImg","videoContStyle","playVideoString","_isVideo","videoClass","elements","visibleElements","element","items","extraProps","getCaptionFromTitleOrAlt","exThumbImage","dynamicElements","availableDynamicOptions","item","dynamicEl","dynamicAttr","label","currentItem","alt","thumb","isHTML5VIdeo","youtube","vimeo","wistia","lgId","LightGallery","options","mobileSettings","_loop_1","this_1","$element","uuid","currentItemIndex","plugin","id","controls","subHtmlCont","addClasses","ariaLabelledby","ariaDescribedby","containerClassName","closeIcon","maximizeIcon","template","outerClassNames","currentGalleryItem","__slideVideoInfo","_a","top_1","imgStyle","lgVideoStyle","currentSlide","currentSrc","_index","galleryItem","itemIndex","selectWithin","bodyRect","scrollbarWidth","itemsToBeInsertedToDom","timeout","currentSlide_1","subHtml","captionHeight","thumbContainer","thumbHeight","$img","counterHtml","subHtmlUrl","fL","$currentSlide","$currentItem","_dummyImgSrc","dummyImgContent","imgContent","$slide","isHTML5VideoWithoutPoster","onLoad","onError","mediaObject","delay","speed","isFirstSlide","_speed","rec","poster","video","_html5Video","srcDyItms","videoInfo","iframe","top_2","videoSize","markup","hasStartAnimation","prevIndex","numberOfItems","possibleNumberOfItems","prevIndexItem","_element","idx","numberOfExistingItems","currentItemId","hideDownloadBtn","$download","direction","currentSlideItem","previousSlideItem","fromTouch","fromThumb","numberOfGalleryItems","previousSlideItem_1","top_3","touchPrev","touchNext","startCoords","endCoords","distanceX","distanceY","allowSwipe","slideWidthAmount","gutter","opacity","scale","distance","triggerClick","distanceAbs","target","isMoved","isSwiping","$item","isDraging","_touchNext","_touchPrev","_loop","$prev","$next","$el","xValue","yValue","scaleX","scaleY","lastCall","now","playButton","isTabPressed","focusableEls","firstFocusableEl","lastFocusableEl","mousedown","force","top_4","_b","removeTimeout","module","destroy","galleryItems","closeTimeout","lightGallery","thumbnailsSettings","Thumbnail","instance","$target","thumbOuterClassNames","thumbDragUtils","isDragging","left","position","touchDuration","distanceXnew","speedX","slideVideoInfo","thumbImg","thumbList","$thumb","lgThumbnail","zoomSettings","ZOOM_TRANSITION_DURATION","Zoom","zoomIcons","scaleDiff","$image","allowY","allowX","reposition","resetToMax","offsetX","offsetY","originalX","originalY","dragAllowedAxises","possibleSwipeCords","_x","_y","scaleVal","actualSizeScale","$imageWrap","$dummyImage","prevScale","naturalWidth","_scale","cords","pageCords","$actualSize","tapped","_LGel","startDist","pinchStarted","initScale","endDist","diff","distanceYnew","speedY","diffMinY","diffMaxY","diffMinX","difMaxX","minX","maxX","minY","maxY","imgRect","imageHeight","imageWidth","startTime","endTime","lgZoom","throttle","callback","_ref","_ref$noTrailing","noTrailing","_ref$noLeading","noLeading","_ref$debounceMode","debounceMode","timeoutID","cancelled","lastExec","clearExistingTimeout","cancel","_ref2","_ref2$upcomingOnly","upcomingOnly","_len","arguments_","_key","self","elapsed","exec","clear","debounce","_ref$atBegin","atBegin","rafSchd","fn","lastArgs","frameId","wrapperFn","args","getDefaultExportFromCjs","Row","itemData","newItems","rowWidthWithoutSpacing","newAspectRatio","sum","targetAspectRatio","previousRowWidthWithoutSpacing","previousAspectRatio","previousTargetAspectRatio","newHeight","widowLayoutStyle","itemWidthSum","clampedToNativeRatio","clampedHeight","errorWidthPerItem","roundedCumulativeErrors","singleItemGeometry","centerOffset","fitToWidth","rowHeight","createNewRow","layoutConfig","layoutData","isBreakoutRow","addRow","row","computeLayout","itemLayoutData","laidOutItems","itemAdded","currentRow","nextToLastRowHeight","input","config","defaults","containerPadding","boxSpacing","betterJustifiedLayout","justifiedLayout","ready","win","global$1","getImgDimensions","cb","interval","hasSize","addedListeners","onHasSize","removeListeners","onLoaded","checkSize","addListeners","fjGalleryList","updateFjGallery","instanceID","FJGallery","userOptions","dataOptions","pureDataOptions","loweCaseOption","styles","properties","$images","data","dimensions","justifyArray","justifiedOptions","justifiedData","lastItemData","gapSize","boxData","additionalTopOffset","rowsMaxHeight","imgI","val","fjGallery","len","ret","lightGalleryItems"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}