UNPKG

228 kBSource Map (JSON)View Raw
1{"version":3,"file":"lightgallery.es5.js","sources":["../src/lg-events.ts","../src/lg-settings.ts","../src/lgQuery.ts","../src/lg-utils.ts","../src/lightgallery.ts","../src/index.ts"],"sourcesContent":["import { LightGallery } from './lightgallery';\nimport { VideoSource } from './plugins/video/types';\n\n/**\n * List of lightGallery events\n * All events should be documented here\n * Below interfaces are used to build the website documentations\n * */\nexport const lGEvents: {\n [key: string]: string;\n} = {\n afterAppendSlide: 'lgAfterAppendSlide',\n init: 'lgInit',\n hasVideo: 'lgHasVideo',\n containerResize: 'lgContainerResize',\n updateSlides: 'lgUpdateSlides',\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\n beforeOpen: 'lgBeforeOpen',\n afterOpen: 'lgAfterOpen',\n slideItemLoad: 'lgSlideItemLoad',\n beforeSlide: 'lgBeforeSlide',\n afterSlide: 'lgAfterSlide',\n posterClick: 'lgPosterClick',\n dragStart: 'lgDragStart',\n dragMove: 'lgDragMove',\n dragEnd: 'lgDragEnd',\n beforeNextSlide: 'lgBeforeNextSlide',\n beforePrevSlide: 'lgBeforePrevSlide',\n beforeClose: 'lgBeforeClose',\n afterClose: 'lgAfterClose',\n rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\n autoplay: 'lgAutoplay',\n autoplayStart: 'lgAutoplayStart',\n autoplayStop: 'lgAutoplayStop',\n};\n\n// Follow the below format for the event documentation\n// @method is the method name when event is used with Angular/React components\n\n/**\n * Fired only once when lightGallery is initialized\n * @name lgInit\n * @method onInit\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action on lightGallery initialization.\n * // Init event returns the plugin instance that can be used to call any lightGalley public method\n * let pluginInstance = null;\n * lg.addEventListener('lgInit', (event) => {\n * pluginInstance = event.detail.instance;\n * });\n * lightGallery(lg);\n * @see <a href=\"/docs/methods\">Methods<a>\n */\nexport interface InitDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired when the slide content has been inserted into it's slide container.\n * @name lgAfterAppendSlide\n * @method onAfterAppendSlide\n */\nexport interface AfterAppendSlideEventDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired immediately before opening the gallery\n * @name lgBeforeOpen\n * @method onBeforeOpen\n */\nexport interface BeforeOpenDetail {}\n\n/**\n * Fired immediately after opening the gallery\n * @name lgAfterOpen\n * @method onAfterOpen\n */\nexport interface AfterOpenDetail {}\n\n/**\n * Fired once the media inside the slide has been completely loaded .\n * @name lgSlideItemLoad\n * @method onSlideItemLoad\n */\nexport interface SlideItemLoadDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * For the first slide, lightGallery adds some delay for displaying the loaded slide item.\n * This delay is required for the transition effect when the slide item is displayed\n * Respect the delay when you use this event\n */\n delay: number;\n\n // Will be true for the first slide\n isFirstSlide: boolean;\n}\n\n/**\n * Fired immediately before each slide transition.\n * @name lgBeforeSlide\n * @method onBeforeSlide\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action before each slide transition\n * lg.addEventListener('lgBeforeSlide', (event) => {\n * const { index, prevIndex } = event.detail;\n * alert(index, prevIndex);\n * });\n * lightGallery(lg);\n */\nexport interface BeforeSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired immediately after each slide transition.\n * @name lgAfterSlide\n * @method onAfterSlide\n */\nexport interface AfterSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired when the video poster is clicked.\n * @name lgPosterClick\n * @method onPosterClick\n */\nexport interface PosterClickDetail {}\n\n/**\n * Fired when the drag event to move to different slide starts.\n * @name lgDragStart\n * @method onDragStart\n */\nexport interface DragStartDetail {}\n\n/**\n * Fired periodically during the drag operation.\n * @name lgDragMove\n * @method onDragMove\n */\nexport interface DragMoveDetail {}\n\n/**\n * Fired when the user has finished the drag operation\n * @name lgDragEnd\n * @method onDragEnd\n */\nexport interface DragEndDetail {}\n\n/**\n * Fired immediately before the start of the close process.\n * @name lgBeforeClose\n * @method onBeforeClose\n */\nexport interface BeforeCloseDetail {}\n\n/**\n * Fired immediately once lightGallery is closed.\n * @name lgAfterClose\n * @method onAfterClose\n */\nexport interface AfterCloseDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired immediately before each \"next\" slide transition\n * @name lgBeforeNextSlide\n * @method onBeforeNextSlide\n */\nexport interface BeforeNextSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired immediately before each \"prev\" slide transition\n * @name lgBeforePrevSlide\n * @method onBeforePrevSlide\n */\nexport interface BeforePrevSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired when the sub-html content (ex : title/ description) has been appended into the slide.\n * @name lgAfterAppendSubHtml\n * @method onAfterAppendSubHtml\n */\nexport interface AfterAppendSubHtmlDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the lightGallery container has been resized.\n * @name lgContainerResize\n * @method onContainerResize\n */\nexport interface ContainerResizeDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when lightGallery detects video slide\n * @name lgHasVideo\n * @method onHasVideo\n */\nexport interface HasVideoDetail {\n /**\n * Index of the slide,\n */\n index: number;\n /**\n * Video source\n */\n src: string;\n /**\n * HTML5 video source if available\n * <p>\n HTML5 video source = source: {\n src: string;\n type: string;\n }[];\n attributes: HTMLVideoElement;\n * </p>\n */\n html5Video: VideoSource;\n /**\n * True if video has poster\n */\n hasPoster: boolean;\n}\n\n/**\n * Fired when the image is rotated in anticlockwise direction\n * @name lgRotateLeft\n * @method onRotateLeft\n */\nexport interface RotateLeftDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is rotated in clockwise direction\n * @name lgRotateRight\n * @method onRotateRight\n */\nexport interface RotateRightDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped horizontally\n * @name lgFlipHorizontal\n * @method onFlipHorizontal\n */\nexport interface FlipHorizontalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped vertically\n * @name lgFlipVertical\n * @method onFlipVertical\n */\nexport interface FlipVerticalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n","import { GalleryItem } from './lg-utils';\nimport { LgQuery } from './lgQuery';\nimport { LightGallery } from './lightgallery';\nimport { AutoplaySettings } from './plugins/autoplay/lg-autoplay-settings';\nimport { CommentSettings } from './plugins/comment/lg-comment-settings';\nimport { FullscreenSettings } from './plugins/fullscreen/lg-fullscreen-settings';\nimport { HashSettings } from './plugins/hash/lg-hash-settings';\nimport { PagerSettings } from './plugins/pager/lg-pager-settings';\nimport { RotateSettings } from './plugins/rotate/lg-rotate-settings';\nimport { ShareSettings } from './plugins/share/lg-share-settings';\nimport { ThumbnailsSettings } from './plugins/thumbnail/lg-thumbnail-settings';\nimport { VideoSettings } from './plugins/video/lg-video-settings';\nimport { ZoomSettings } from './plugins/zoom/lg-zoom-settings';\n\ntype LightGalleryCoreMobileSettings = Exclude<\n LightGalleryCoreSettings,\n 'mobileSettings'\n>;\n\n// @todo use separate mobile settings for plugins\nexport interface MobileSettings\n extends LightGalleryCoreMobileSettings,\n Partial<ZoomSettings>,\n Partial<ThumbnailsSettings>,\n Partial<VideoSettings>,\n Partial<AutoplaySettings>,\n Partial<CommentSettings>,\n Partial<FullscreenSettings>,\n Partial<HashSettings>,\n Partial<PagerSettings>,\n Partial<RotateSettings>,\n Partial<ShareSettings> {}\n\nexport interface LightGalleryCoreStrings {\n closeGallery: string;\n toggleMaximize: string;\n previousSlide: string;\n nextSlide: string;\n download: string;\n playVideo: string;\n}\n\nexport type LightGalleryAllSettings = LightGalleryCoreSettings &\n ZoomSettings &\n ThumbnailsSettings &\n VideoSettings &\n AutoplaySettings &\n CommentSettings &\n FullscreenSettings &\n HashSettings &\n PagerSettings &\n RotateSettings &\n ShareSettings;\n\nexport type LightGallerySettings = Partial<LightGalleryAllSettings>;\n\nexport interface LightGalleryCoreSettings {\n /**\n * Type of transition between images.\n */\n mode:\n | 'lg-slide'\n | 'lg-fade'\n | 'lg-zoom-in'\n | 'lg-zoom-in-big'\n | 'lg-zoom-out'\n | 'lg-zoom-out-big'\n | 'lg-zoom-out-in'\n | 'lg-zoom-in-out'\n | 'lg-soft-zoom'\n | 'lg-scale-up'\n | 'lg-slide-circular'\n | 'lg-slide-circular-vertical'\n | 'lg-slide-vertical'\n | 'lg-slide-vertical-growth'\n | 'lg-slide-skew-only'\n | 'lg-slide-skew-only-rev'\n | 'lg-slide-skew-only-y'\n | 'lg-slide-skew-only-y-rev'\n | 'lg-slide-skew'\n | 'lg-slide-skew-rev'\n | 'lg-slide-skew-cross'\n | 'lg-slide-skew-cross-rev'\n | 'lg-slide-skew-ver'\n | 'lg-slide-skew-ver-rev'\n | 'lg-slide-skew-ver-cross'\n | 'lg-slide-skew-ver-cross-rev'\n | 'lg-lollipop'\n | 'lg-lollipop-rev'\n | 'lg-rotate'\n | 'lg-rotate-rev'\n | 'lg-tube';\n\n /**\n * Slide animation CSS easing property\n */\n easing: string;\n\n /**\n *Transition duration (in ms).\n */\n speed: number;\n\n /**\n * If you are using lightGallery for commercial projects, you need to purchase a commercial license\n * to get the license key. For projects that are compatible with GPLv3 license,\n * please contact us for getting a license key at <a href=\"mailto:contact@lightgalleryjs.com\">contact@lightgalleryjs.com</a>.\n * If you want to test lightGallery before purchasing a commercial license, you can\n * use `0000-0000-000-0000` as a temporary license key\n */\n\n licenseKey: string;\n\n /**\n * Height of the gallery.\n * example '100%' , '300px'\n */\n height: string;\n\n /**\n * Width of the gallery.\n * example '100%' , '300px'\n */\n width: string;\n\n /**\n * Add custom class for gallery container\n * This can be used to set different style for different galleries\n */\n addClass: string;\n\n /**\n * Start animation class for the gallery.\n * @description\n * <ul>\n * <li>startClass will be empty zoomFromOrigin is true.</li>\n * <li>This can be used to change the starting effect when the image is loaded</li>\n * <li>This is also applied when navigating to new slides</li>\n * </ul>\n */\n startClass: string;\n\n /**\n * Enable zoom from origin effect.\n * @description You need to know the original image size upfront and provide it via data-lg-size attribute as <code> data-lg-size=\"1920-1280</code>\"\n *\n * If you don't know, the size of a few images in the list, you can skip the data-lg-size attribute for the particular slides,\n * lightGallery will show the default animation if data-lg-size is not available\n *\n * If you are using responsive images,\n * you can pass a comma separated list of sizes combined with a max-width (up to what size the particular image should be used)\n *\n * example -\n * <code> data-lg-size=\"240-160-375, 400-267-480, 1600-1067\"\n * data-responsive=\"img-240.jpg 375, img-400.jpg 480\"\n * data-src=\"img-1600.jpg\" </code>\n *\n * In the above example, upto 375 width img.240.jpg and lg-size 240-160 will be used.\n * Similarly, upto 480 pixel width size 400-267 and img-400.jpg will be used\n * And above 480, lg-size 1600-1067 and img-1600.jpg will be used\n *\n * <ul>\n * <li>At the moment, zoomFromOrigin options is supported only for image slides.</li>\n * <li>Will be false if dynamic option is enabled or galleryID found in the URL.</li>\n * <li>startClass will be empty if zoomFromOrigin is true to avoid css conflicts.</li>\n * </ul>\n */\n zoomFromOrigin: boolean;\n\n /**\n * Zoom from image animation duration\n */\n startAnimationDuration: number;\n\n /**\n * Backdrop transition duration.\n * Note - Do not change the value of backdrop via css.\n */\n backdropDuration: number;\n\n /**\n * Configure where the gallery should be appended.\n * Useful to create inline galleries and more\n * It is an empty string in the default settings and later assigned to document.body to avoid accessing document for SSR\n */\n container: HTMLElement | '';\n\n /**\n * Delay for hiding gallery controls in ms.\n * Pass <code>0</code> if you don't want to hide the controls\n */\n hideBarsDelay: number;\n\n /**\n * Delay in hiding controls for the first time when gallery is opened\n */\n showBarsAfter: number;\n\n /**\n * Delay slide transitions.\n * @description This is useful if you want to do any action in the current slide before moving to next slide.\n * <section>\n * For example, fading out the captions before going to next slide.\n * <code>.lg-slide-progress</code> class name is added to the current slide immediately after calling the slide method.\n * But transition begins only after the delay\n * </section>\n */\n slideDelay: number;\n\n /**\n * Support legacy browsers\n * @description Currently this is used only for adding support to srcset attribute via picturefill library\n * If true lightGallery will show warning message to include picturefill library\n */\n supportLegacyBrowser: boolean;\n\n /**\n * If true, toolbar, captions and thumbnails will not overlap with media element\n * This will not effect thumbnails if animateThumb is false\n * Also, toggle thumbnails button is not displayed if allowMediaOverlap is false\n * <section>\n * Note - Changing the position of the media on every slide transition creates a flickering effect.\n * Therefore, the height of the caption is calculated dynamically, only once based on the first slide caption.\n * </section>\n * <section>\n * if you have dynamic captions for each media,\n * you can provide an appropriate height for the captions via allowMediaOverlap option\n * </section>\n */\n allowMediaOverlap: boolean;\n\n /**\n * Video max size.\n * @description This can be over-written by passing specific size via data-lg-size attribute\n * Recommended video resolution and & aspect ratios <a href=\"https://support.google.com/youtube/answer/6375112\">https://support.google.com/youtube/answer/6375112</a>\n */\n videoMaxSize: string;\n\n /**\n * Automatically load poster image for YouTube videos\n */\n loadYouTubePoster: boolean;\n\n /**\n * Height of the caption for calculating allowMediaOverlap positions\n * Note - this is only used to find the position of media item if allowMediaOverlap is true.\n * Not for setting height of the captions\n * Set 0 if you want to calculate the height of captions dynamically\n */\n defaultCaptionHeight: number;\n\n /**\n * aria-labelledby attribute fot gallery\n */\n ariaLabelledby: string;\n\n /**\n * aria-describedby attribute for gallery\n */\n ariaDescribedby: string;\n\n /**\n * Hide scrollbar when gallery is opened\n * @version V2.5.0\n */\n hideScrollbar: boolean;\n\n /**\n * Reset to previous scrollPosition when lightGallery is closed\n * @description By default, lightGallery doesn't hide the scrollbar for a smooth opening transition.\n * If a user changes the scroll position, lightGallery resets it to the previous value\n * @version V2.5.0\n */\n resetScrollPosition: boolean;\n\n /**\n * If false user won't be abel to close the gallery at all\n * This is useful for creating inline galleries.\n */\n closable: boolean;\n\n /**\n * allows vertical drag/swipe to close gallery\n * <code>false</code> if option <code>closable</code> is <code>false</code>\n */\n swipeToClose: boolean;\n /**\n * allows clicks on black area to close gallery.\n */\n closeOnTap: boolean;\n\n /**\n * If false, close button won't be displayed.\n * Useful for creating inline galleries.\n */\n showCloseIcon: boolean;\n\n /**\n * Show maximize icon.\n * Useful for creating inline galleries.\n */\n showMaximizeIcon: boolean;\n\n /**\n * If false, will disable the ability to loop back to the beginning of the gallery from the last slide.\n */\n loop: boolean;\n\n /**\n * Whether the LightGallery could be closed by pressing the \"Esc\" key.\n */\n escKey: boolean;\n\n /**\n * Enable keyboard navigation\n */\n keyPress: boolean;\n\n /**\n * Trap focus within the lightGallery\n * @version V2.5.0\n */\n trapFocus: boolean;\n\n /**\n * If false, prev/next buttons will not be displayed.\n */\n controls: boolean;\n\n /**\n * Enable slideEnd animation\n */\n slideEndAnimation: boolean;\n\n /**\n * If true, prev/next button will be hidden on first/last image.\n */\n hideControlOnEnd: boolean;\n\n /**\n * ability to navigate to next/prev slides on mousewheel\n */\n mousewheel: boolean;\n\n /**\n * Option to get captions from alt or title tags.\n */\n getCaptionFromTitleOrAlt: boolean;\n\n /**\n * control where the sub-html should be appended.\n * If you choose '.lg-outer', you are responsible for placing the div at the right position.\n * '.lg-outer' is useful if you want show custom HTML outside the normal gallery\n */\n appendSubHtmlTo: '.lg-sub-html' | '.lg-item' | '.lg-outer';\n\n /**\n * Set to true if the selector in \"data-sub-html\" should use the current item as its origin.\n */\n subHtmlSelectorRelative: boolean;\n\n /**\n * number of preload slides\n * @description will exicute only after the current slide is fully loaded.\n * for example, if you click on 4th image and if preload = 1 then 3rd slide and 5th\n * slide will be loaded in the background after the 4th slide is fully loaded..\n * if preload is 2 then 2nd 3rd 5th 6th slides will be preloaded.\n */\n preload: number;\n\n /**\n * Control how many slide items should be kept in dom at a time\n * @description To improve performance by reducing number of gallery items in the dom,\n * lightGallery keeps only the lowest possible number of slides in the dom at a time.\n * This has a minimum value of 3\n */\n numberOfSlideItemsInDom: number;\n\n /**\n * Custom selector property instead of direct children.\n * @description Based on your markup structure, you can specify custom selectors to fetch media data for the gallery\n * Pass \"this\" to select same element\n * You can also pass HTMLCollection directly\n * Example - '.my-selector' | '#my-selector' | this | document.querySelectorAll('.my-selector')\n */\n selector: string | HTMLCollection[];\n\n /**\n * By default selector element relative to the current gallery.\n * Instead of that you can tell lightGallery to select element relative to another element.\n * Example - '.my-selector-container' | '#my-selector-container'\n * In the code this become selector = document.querySelector(this.s.selectWithin ).querySelectorAll(this.s.selector);\n */\n selectWithin: string;\n\n /**\n * Custom html for next control\n */\n nextHtml: string;\n\n /**\n * Custom html for prev control\n */\n prevHtml: string;\n\n /**\n * specify which slide should load initially\n */\n index: number;\n\n /**\n * Set width for iframe.\n */\n iframeWidth: string;\n\n /**\n * Set height for iframe.\n */\n iframeHeight: string;\n\n /**\n * Set max width for iframe.\n */\n iframeMaxWidth: string;\n\n /**\n * Set max height for iframe.\n */\n iframeMaxHeight: string;\n\n /**\n * Enable download button.\n * @description By default download url will be taken from data-src/href attribute but it supports only for modern browsers.\n * If you want you can provide another url for download via data-download-url.\n * pass false in data-download-url if you want to hide download button for the particular slide.\n */\n download: boolean;\n\n /**\n * Whether to show total number of images and index number of currently displayed image.\n */\n counter: boolean;\n\n /**\n * Where the counter should be appended\n */\n appendCounterTo: string;\n\n /**\n * By setting the swipeThreshold (in px) you can set how far the user must swipe for the next/prev image.\n */\n swipeThreshold: number;\n\n /**\n * Enables swipe support for touch devices\n */\n enableSwipe: boolean;\n\n /**\n * Enables desktop mouse drag support\n */\n enableDrag: boolean;\n\n /**\n * LightGallery can be instantiated and launched programmatically by setting this option to true and populating dynamicEl option (see below) with the definitions of images.\n */\n dynamic: boolean;\n\n /**\n * An array of objects (src, iframe, subHtml, thumb, poster, responsive, srcset sizes) representing gallery elements.\n */\n dynamicEl: GalleryItem[];\n\n /**\n * Fetch custom properties from the selector\n * @description this is useful for plugin development\n * By default lightGallery fetches and store all the props selectors to\n * reduce frequent dom interaction for fetching props every time.\n *\n * If you need any addition data to be fetched and stored in the galleryItems variable,\n * you can do this just by passing the prop names via extraProps\n * @example\n * HTML:\n * <div id=\"lightGallery\">\n * <a href=\"a.jpg\" data-custom-prop=\"abc\"><img src=\"thumb.jpg\" /></a>\n * <a href=\"a.jpg\" data-custom-prop=\"xyz\"><img src=\"thumb.jpg\" /></a>\n * </div>\n * JS:\n * lightGallery(document.getElementById('lightGallery'), {\n * extraProps: ['customProp']\n * })\n * // Note - If you are using dynamic mode, you can pass any custom prop in the galleryItem\n * lightGallery(document.getElementById('lightGallery'), {\n * dynamic: true,\n * dynamicEl: [{\n * src: 'img/img1.jpg',\n * customProp:'abc',\n * }]\n * })\n *\n */\n extraProps: string[];\n\n /**\n * Option to fetch different thumbnail image other than first image\n * @description If you want to use external image for thumbnail,\n * add the path of that image inside \"data-\" attribute\n * and set value of this option to the name of your custom attribute.\n *\n * @example\n * <div id=\"lightGallery\">\n * <a href=\"a.jpg\" data-external-thumb-image=\"images/externalThumb.jpg\" ><img src=\"thumb.jpg\" /></a>\n * </div>\n *\n * lightGallery(document.getElementById('lightGallery'), {\n * exThumbImage: 'data-external-thumb-image'\n * })\n */\n exThumbImage: string;\n\n /**\n * Function to detect mobile devices\n */\n isMobile?: () => boolean;\n\n /**\n * Separate settings for mobile devices\n * @description Note - this is applied only at the time of loading\n * by default controls and close buttons are disabled on mobile devices.\n * use this options if you want to enable them or change any other settings for mobile devices\n * Note - mobileSettings does not merge default values, You need to provide all mobileSettings including default values\n */\n mobileSettings: Partial<MobileSettings>;\n\n /**\n * Aria label strings for lightGallery core modules.\n * @description This can be useful if you want to localize the lightGallery strings to other languages.\n * Use your own service to translate the strings and pass it via settings.strings\n * You can find dedicated strings option for all lightGallery modules in their respective documentation.\n */\n strings: LightGalleryCoreStrings;\n\n plugins: (new (instance: LightGallery, $LG: LgQuery) => any)[];\n}\n\nexport const lightGalleryCoreSettings: LightGalleryCoreSettings = {\n mode: 'lg-slide',\n easing: 'ease',\n speed: 400,\n licenseKey: '0000-0000-000-0000',\n height: '100%',\n width: '100%',\n addClass: '',\n startClass: 'lg-start-zoom',\n backdropDuration: 300,\n container: '',\n startAnimationDuration: 400,\n zoomFromOrigin: true,\n hideBarsDelay: 0,\n showBarsAfter: 10000,\n slideDelay: 0,\n supportLegacyBrowser: true,\n allowMediaOverlap: false,\n videoMaxSize: '1280-720',\n loadYouTubePoster: true,\n defaultCaptionHeight: 0,\n ariaLabelledby: '',\n ariaDescribedby: '',\n resetScrollPosition: true,\n hideScrollbar: false,\n closable: true,\n swipeToClose: true,\n closeOnTap: true,\n showCloseIcon: true,\n showMaximizeIcon: false,\n loop: true,\n escKey: true,\n keyPress: true,\n trapFocus: true,\n controls: true,\n slideEndAnimation: true,\n hideControlOnEnd: false,\n mousewheel: false,\n getCaptionFromTitleOrAlt: true,\n appendSubHtmlTo: '.lg-sub-html',\n subHtmlSelectorRelative: false,\n preload: 2,\n numberOfSlideItemsInDom: 10,\n selector: '',\n selectWithin: '',\n nextHtml: '',\n prevHtml: '',\n index: 0,\n iframeWidth: '100%',\n iframeHeight: '100%',\n iframeMaxWidth: '100%',\n iframeMaxHeight: '100%',\n download: true,\n counter: true,\n appendCounterTo: '.lg-toolbar',\n swipeThreshold: 50,\n enableSwipe: true,\n enableDrag: true,\n dynamic: false,\n dynamicEl: [],\n extraProps: [],\n exThumbImage: '',\n isMobile: undefined,\n mobileSettings: {\n controls: false,\n showCloseIcon: false,\n download: false,\n } as MobileSettings,\n plugins: [],\n strings: {\n closeGallery: 'Close gallery',\n toggleMaximize: 'Toggle maximize',\n previousSlide: 'Previous slide',\n nextSlide: 'Next slide',\n download: 'Download',\n playVideo: 'Play video',\n } as LightGalleryCoreStrings,\n};\n","interface Offset {\n left: number;\n top: number;\n}\n\nfunction initLgPolyfills() {\n (function () {\n if (typeof window.CustomEvent === 'function') return false;\n\n function CustomEvent(event: string, params: any) {\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: null,\n };\n const evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(\n event,\n params.bubbles,\n params.cancelable,\n params.detail,\n );\n return evt;\n }\n\n window.CustomEvent = CustomEvent as any;\n })();\n (function () {\n if (!Element.prototype.matches) {\n Element.prototype.matches =\n (Element.prototype as any).msMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n }\n })();\n}\n\nexport type LgQuery = (selector: any) => lgQuery;\nexport class lgQuery {\n static eventListeners: { [key: string]: any[] } = {};\n static generateUUID(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(\n /[xy]/g,\n function (c) {\n const r = (Math.random() * 16) | 0,\n v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n },\n );\n }\n\n private selector: any;\n private firstElement: any;\n private cssVenderPrefixes: string[] = [\n 'TransitionDuration',\n 'TransitionTimingFunction',\n 'Transform',\n 'Transition',\n ];\n constructor(selector: string | Element) {\n this.selector = this._getSelector(selector);\n this.firstElement = this._getFirstEl();\n return this;\n }\n\n private _getSelector(\n selector: string | Element,\n context: Element | Document = document,\n ): Element | null | NodeListOf<Element> {\n if (typeof selector !== 'string') {\n return selector;\n }\n context = context || document;\n const fl = selector.substring(0, 1);\n if (fl === '#') {\n return context.querySelector(selector);\n } else {\n return context.querySelectorAll(selector);\n }\n }\n\n private _each(\n func: (\n elements: Element | NodeListOf<Element> | null,\n index: number,\n ) => void,\n ): this {\n if (!this.selector) {\n return this;\n }\n if (this.selector.length !== undefined) {\n [].forEach.call(this.selector, func);\n } else {\n func(this.selector, 0);\n }\n return this;\n }\n\n private _setCssVendorPrefix(\n el: any,\n cssProperty: string,\n value?: string | number,\n ): void {\n // prettier-ignore\n const property = cssProperty.replace(/-([a-z])/gi, function (\n s,\n group1,\n ) {\n return group1.toUpperCase();\n });\n if (this.cssVenderPrefixes.indexOf(property) !== -1) {\n el.style[\n property.charAt(0).toLowerCase() + property.slice(1)\n ] = value;\n el.style['webkit' + property] = value;\n el.style['moz' + property] = value;\n el.style['ms' + property] = value;\n el.style['o' + property] = value;\n } else {\n el.style[property] = value;\n }\n }\n\n private _getFirstEl() {\n if (this.selector && this.selector.length !== undefined) {\n return this.selector[0];\n } else {\n return this.selector;\n }\n }\n\n private isEventMatched(event: string, eventName: string): boolean {\n const eventNamespace = eventName.split('.');\n return event\n .split('.')\n .filter((e) => e)\n .every((e) => {\n return eventNamespace.indexOf(e) !== -1;\n });\n }\n\n attr(attr: string): string;\n attr(attr: string, value: string | number | boolean): this;\n attr(attr: string, value?: string | number | boolean): string | this {\n if (value === undefined) {\n if (!this.firstElement) {\n return '';\n }\n return this.firstElement.getAttribute(attr);\n }\n this._each((el: any) => {\n el.setAttribute(attr, value);\n });\n return this;\n }\n\n find(selector: any): lgQuery {\n return $LG(this._getSelector(selector, this.selector));\n }\n\n first(): lgQuery {\n if (this.selector && this.selector.length !== undefined) {\n return $LG(this.selector[0]);\n } else {\n return $LG(this.selector);\n }\n }\n\n eq(index: number): lgQuery {\n return $LG(this.selector[index]);\n }\n\n parent(): lgQuery {\n return $LG(this.selector.parentElement);\n }\n\n get(): HTMLElement {\n return this._getFirstEl();\n }\n\n removeAttr(attributes: string): this {\n const attrs = attributes.split(' ');\n this._each((el: any) => {\n attrs.forEach((attr: string) => el.removeAttribute(attr));\n });\n return this;\n }\n\n wrap(className: string): this {\n if (!this.firstElement) {\n return this;\n }\n const wrapper = document.createElement('div');\n wrapper.className = className;\n this.firstElement.parentNode.insertBefore(wrapper, this.firstElement);\n this.firstElement.parentNode.removeChild(this.firstElement);\n wrapper.appendChild(this.firstElement);\n return this;\n }\n\n addClass(classNames = ''): this {\n this._each((el: any) => {\n // IE doesn't support multiple arguments\n classNames.split(' ').forEach((className) => {\n if (className) {\n el.classList.add(className);\n }\n });\n });\n return this;\n }\n\n removeClass(classNames: string): this {\n this._each((el: any) => {\n // IE doesn't support multiple arguments\n classNames.split(' ').forEach((className) => {\n if (className) {\n el.classList.remove(className);\n }\n });\n });\n return this;\n }\n\n hasClass(className: string): boolean {\n if (!this.firstElement) {\n return false;\n }\n return this.firstElement.classList.contains(className);\n }\n hasAttribute(attribute: string): boolean {\n if (!this.firstElement) {\n return false;\n }\n return this.firstElement.hasAttribute(attribute);\n }\n toggleClass(className: string): this {\n if (!this.firstElement) {\n return this;\n }\n if (this.hasClass(className)) {\n this.removeClass(className);\n } else {\n this.addClass(className);\n }\n return this;\n }\n\n css(property: string, value?: string | number): this {\n this._each((el: any) => {\n this._setCssVendorPrefix(el, property, value);\n });\n return this;\n }\n // Need to pass separate namespaces for separate elements\n on(events: string, listener: (e: any) => void): this {\n if (!this.selector) {\n return this;\n }\n events.split(' ').forEach((event: string) => {\n if (!Array.isArray(lgQuery.eventListeners[event])) {\n lgQuery.eventListeners[event] = [];\n }\n lgQuery.eventListeners[event].push(listener);\n this.selector.addEventListener(event.split('.')[0], listener);\n });\n\n return this;\n }\n // @todo - test this\n once(event: string, listener: (e: any) => void): this {\n this.on(event, () => {\n this.off(event);\n listener(event);\n });\n return this;\n }\n off(event: string): this {\n if (!this.selector) {\n return this;\n }\n Object.keys(lgQuery.eventListeners).forEach((eventName) => {\n if (this.isEventMatched(event, eventName)) {\n lgQuery.eventListeners[eventName].forEach((listener) => {\n this.selector.removeEventListener(\n eventName.split('.')[0],\n listener,\n );\n });\n lgQuery.eventListeners[eventName] = [];\n }\n });\n\n return this;\n }\n trigger<Detail>(event: string, detail?: Detail): this {\n if (!this.firstElement) {\n return this;\n }\n\n const customEvent = new CustomEvent(event.split('.')[0], {\n detail: detail || null,\n });\n this.firstElement.dispatchEvent(customEvent);\n return this;\n }\n\n // Does not support IE\n load(url: string): this {\n fetch(url)\n .then((res) => res.text())\n .then((html) => {\n this.selector.innerHTML = html;\n });\n return this;\n }\n\n html(): string;\n html(html: string): this;\n html(html?: string): string | this {\n if (html === undefined) {\n if (!this.firstElement) {\n return '';\n }\n return this.firstElement.innerHTML;\n }\n this._each((el: any) => {\n el.innerHTML = html;\n });\n return this;\n }\n append(html: string | HTMLElement): this {\n this._each((el: any) => {\n if (typeof html === 'string') {\n el.insertAdjacentHTML('beforeend', html);\n } else {\n el.appendChild(html);\n }\n });\n return this;\n }\n prepend(html: string): this {\n this._each((el: any) => {\n el.insertAdjacentHTML('afterbegin', html);\n });\n return this;\n }\n remove(): this {\n this._each((el: any) => {\n el.parentNode.removeChild(el);\n });\n return this;\n }\n empty(): this {\n this._each((el: any) => {\n el.innerHTML = '';\n });\n return this;\n }\n // Supports only window\n scrollTop(): number;\n scrollTop(scrollTop: number): this;\n scrollTop(scrollTop?: number): number | this {\n if (scrollTop !== undefined) {\n document.body.scrollTop = scrollTop;\n document.documentElement.scrollTop = scrollTop;\n return this;\n } else {\n return (\n window.pageYOffset ||\n document.documentElement.scrollTop ||\n document.body.scrollTop ||\n 0\n );\n }\n }\n // Supports only window\n scrollLeft(): number;\n scrollLeft(scrollLeft?: number): this;\n scrollLeft(scrollLeft?: number): number | this {\n if (scrollLeft !== undefined) {\n document.body.scrollLeft = scrollLeft;\n document.documentElement.scrollLeft = scrollLeft;\n return this;\n } else {\n return (\n window.pageXOffset ||\n document.documentElement.scrollLeft ||\n document.body.scrollLeft ||\n 0\n );\n }\n }\n offset(): Offset {\n if (!this.firstElement) {\n return {\n left: 0,\n top: 0,\n };\n }\n const rect = this.firstElement.getBoundingClientRect();\n const bodyMarginLeft = $LG('body').style().marginLeft;\n\n // Minus body margin - https://stackoverflow.com/questions/30711548/is-getboundingclientrect-left-returning-a-wrong-value\n return {\n left: rect.left - parseFloat(bodyMarginLeft) + this.scrollLeft(),\n top: rect.top + this.scrollTop(),\n };\n }\n style(): CSSStyleDeclaration {\n if (!this.firstElement) {\n return {} as CSSStyleDeclaration;\n }\n return (\n this.firstElement.currentStyle ||\n window.getComputedStyle(this.firstElement)\n );\n }\n // Width without padding and border even if box-sizing is used.\n width(): number {\n const style = this.style();\n return (\n this.firstElement.clientWidth -\n parseFloat(style.paddingLeft) -\n parseFloat(style.paddingRight)\n );\n }\n // Height without padding and border even if box-sizing is used.\n height(): number {\n const style = this.style();\n return (\n this.firstElement.clientHeight -\n parseFloat(style.paddingTop) -\n parseFloat(style.paddingBottom)\n );\n }\n}\n\nexport function $LG(selector: any): lgQuery {\n initLgPolyfills();\n return new lgQuery(selector);\n}\n","import { $LG, lgQuery } from './lgQuery';\nimport { VideoSource } from './plugins/video/types';\nimport { VideoInfo } from './types';\n\nexport interface ImageSize {\n width: number;\n height: number;\n}\n\nexport interface ImageSources {\n media?: string;\n srcset: string;\n sizes?: string;\n type?: string;\n}\n\nexport interface GalleryItem {\n /**\n * url of the media\n * @data-attr data-src\n */\n src?: string;\n\n /**\n * Source attributes for the <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source#attributes\">picture</a> element\n * @data-attr data-sources\n */\n sources?: ImageSources[];\n\n /**\n * Thumbnail url\n * @description By default lightGallery uses the image inside gallery selector as thumbnail.\n * But, If you want to use external image for thumbnail,\n * pass the thumbnail url via any data attribute and\n * pass the attribute name via exThumbImage option\n * @example\n * <div id=\"lightGallery\">\n * <a href=\"a.jpg\" data-external-thumb-image=\"images/externalThumb.jpg\" ><img src=\"thumb.jpg\" /></a>\n * </div>\n *\n * lightGallery(document.getElementById('lightGallery'), {\n * exThumbImage: 'data-external-thumb-image'\n * })\n * @data-attr data-*\n */\n thumb?: string;\n\n /**\n * alt attribute for the image\n * @data-attr alt\n */\n alt?: string;\n\n /**\n * Title attribute for the video\n * @data-attr title\n */\n title?: string;\n\n /**\n * Title for iframe\n * @data-attr data-iframe-title\n */\n iframeTitle?: string;\n\n /**\n * Caption for the slide\n * @description You can either pass the HTML markup or the ID or class name of the element which contains the captions\n * @data-attr data-sub-html\n */\n subHtml?: string;\n\n /**\n * url of the file which contain the sub html.\n * @description Note - Does not support Internet Explorer browser\n * @data-attr data-sub-html-url\n */\n subHtmlUrl?: string;\n\n /**\n * Video source\n * @data-attr data-video\n */\n video?: VideoSource;\n\n /**\n * Poster url\n * @data-attr data-poster\n */\n poster?: string;\n\n /**\n * Custom slide name to use in the url when hash plugin is enabled\n * @data-attr data-slide-name\n */\n slideName?: string;\n\n /**\n * List of images and viewport's max width separated by comma.\n * @description Ex?: img/1-375.jpg 375, img/1-480.jpg 480, img/1-757.jpg 757.\n * @data-attr data-responsive\n */\n responsive?: string;\n\n /**\n * srcset attribute values for the main image\n * @data-attr data-srcset\n */\n srcset?: string;\n\n /**\n * srcset sizes attribute for the main image\n * @data-attr data-sizes\n */\n sizes?: string;\n\n /**\n * Set true is you want to open your url in an iframe\n * @data-attr data-iframe\n */\n iframe?: boolean;\n\n /**\n * Download url for your image/video.\n * @description Pass false if you want to disable the download button.\n * @data-attr data-download-url\n */\n downloadUrl?: string | boolean;\n\n /**\n * Name of the file after it is downloaded.\n * @description The HTML value of the download attribute.\n * There are no restrictions on allowed values, and the browser will automatically\n * detect the correct file extension and add it to the file (.img, .pdf, .txt, .html, etc.).\n * <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download\">More info</a>\n * @data-attr data-download\n */\n download?: string | boolean;\n\n /**\n * Actual size of the image in px.\n * @description This is used in zoom plugin to see the actual size of the image when double taped on the image.\n * @data-attr data-width\n */\n width?: string;\n\n /**\n * Facebook share URL.\n * @description Specify only if you want to provide separate share URL for the specific slide. By default, current browser URL is taken.\n * @data-attr data-facebook-share-url\n */\n facebookShareUrl?: string;\n\n /**\n * Tweet text\n * @data-attr data-tweet-text\n */\n tweetText?: string;\n\n /**\n * Twitter share URL.\n * @description Specify only if you want to provide separate share URL for the specific slide. By default, current browser URL will be taken.\n * @data-attr data-twitter-share-url\n */\n twitterShareUrl?: string;\n\n /**\n * Pinterest share URL.\n * @description Specify only if you want to provide separate share URL for the specific slide. By default, current browser URL will be taken.\n * Note?: Pinterest requires absolute URL\n * @data-attr data-pinterest-share-url\n */\n pinterestShareUrl?: string;\n\n /**\n * Description for Pinterest post.\n * @data-attr data-pinterest-text\n */\n pinterestText?: string;\n\n /**\n * Facebook comments body html\n * @description Please refer <a href=\"https://developers.facebook.com/docs/plugins/comments/#comments-plugin\">facebook official documentation</a> for generating the HTML markup\n * @example\n * <div\n * class=\"fb-comments\"\n * data-href=\"https://www.lightgalleryjs.com/demos/comment-box/#facebook-comments-demo\"\n * data-width=\"400\"\n * data-numposts=\"5\">\n * </div>\n * @data-attr data-fb-html\n */\n fbHtml?: string;\n\n /**\n * Disqus page identifier\n * @description Please refer official <a href=\"https://help.disqus.com/en/articles/1717084-javascript-configuration-variables\">disqus documentation</a> for more info\n * @data-attr data-disqus-identifier\n */\n disqusIdentifier?: string;\n\n /**\n * Disqus page url\n * @description Please refer official <a href=\"https://help.disqus.com/en/articles/1717084-javascript-configuration-variables\">disqus documentation</a> for more info\n * @data-attr data-disqus-url\n */\n disqusUrl?: string;\n\n __slideVideoInfo?: VideoInfo;\n [key: string]: any;\n}\n\nconst defaultDynamicOptions = [\n 'src',\n 'sources',\n 'subHtml',\n 'subHtmlUrl',\n 'html',\n 'video',\n 'poster',\n 'slideName',\n 'responsive',\n 'srcset',\n 'sizes',\n 'iframe',\n 'downloadUrl',\n 'download',\n 'width',\n 'facebookShareUrl',\n 'tweetText',\n 'iframeTitle',\n 'twitterShareUrl',\n 'pinterestShareUrl',\n 'pinterestText',\n 'fbHtml',\n 'disqusIdentifier',\n 'disqusUrl',\n];\n\n// Convert html data-attribute to camalcase\nexport function convertToData(attr: string): string {\n // FInd a way for lgsize\n if (attr === 'href') {\n return 'src';\n }\n attr = attr.replace('data-', '');\n attr = attr.charAt(0).toLowerCase() + attr.slice(1);\n attr = attr.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\n\n return attr;\n}\n\nconst utils = {\n /**\n * get possible width and height from the lgSize attribute. Used for ZoomFromOrigin option\n */\n getSize(\n el: HTMLElement,\n container: lgQuery,\n spacing = 0,\n defaultLgSize?: string,\n ): ImageSize | undefined {\n const LGel = $LG(el);\n let lgSize = LGel.attr('data-lg-size') || defaultLgSize;\n\n if (!lgSize) {\n return;\n }\n\n const isResponsiveSizes = lgSize.split(',');\n // if at-least two viewport sizes are available\n if (isResponsiveSizes[1]) {\n const wWidth = window.innerWidth;\n for (let i = 0; i < isResponsiveSizes.length; i++) {\n const size = isResponsiveSizes[i];\n const responsiveWidth = parseInt(size.split('-')[2], 10);\n if (responsiveWidth > wWidth) {\n lgSize = size;\n break;\n }\n\n // take last item as last option\n if (i === isResponsiveSizes.length - 1) {\n lgSize = size;\n }\n }\n }\n\n const size = lgSize.split('-');\n\n const width = parseInt(size[0], 10);\n const height = parseInt(size[1], 10);\n\n const cWidth = container.width();\n const cHeight = container.height() - spacing;\n\n const maxWidth = Math.min(cWidth, width);\n const maxHeight = Math.min(cHeight, height);\n\n const ratio = Math.min(maxWidth / width, maxHeight / height);\n\n return { width: width * ratio, height: height * ratio };\n },\n\n /**\n * @desc Get transform value based on the imageSize. Used for ZoomFromOrigin option\n * @param {jQuery Element}\n * @returns {String} Transform CSS string\n */\n getTransform(\n el: HTMLElement,\n container: lgQuery,\n top: number,\n bottom: number,\n imageSize?: ImageSize,\n ): string | undefined {\n if (!imageSize) {\n return;\n }\n const LGel = $LG(el).find('img').first();\n if (!LGel.get()) {\n return;\n }\n\n const containerRect = container.get().getBoundingClientRect();\n\n const wWidth = containerRect.width;\n\n // using innerWidth to include mobile safari bottom bar\n const wHeight = container.height() - (top + bottom);\n\n const elWidth = LGel.width();\n const elHeight = LGel.height();\n\n const elStyle = LGel.style();\n let x =\n (wWidth - elWidth) / 2 -\n LGel.offset().left +\n (parseFloat(elStyle.paddingLeft) || 0) +\n (parseFloat(elStyle.borderLeft) || 0) +\n $LG(window).scrollLeft() +\n containerRect.left;\n let y =\n (wHeight - elHeight) / 2 -\n LGel.offset().top +\n (parseFloat(elStyle.paddingTop) || 0) +\n (parseFloat(elStyle.borderTop) || 0) +\n $LG(window).scrollTop() +\n top;\n\n const scX = elWidth / imageSize.width;\n const scY = elHeight / imageSize.height;\n\n const transform =\n 'translate3d(' +\n (x *= -1) +\n 'px, ' +\n (y *= -1) +\n 'px, 0) scale3d(' +\n scX +\n ', ' +\n scY +\n ', 1)';\n return transform;\n },\n\n getIframeMarkup(\n iframeWidth: string,\n iframeHeight: string,\n iframeMaxWidth: string,\n iframeMaxHeight: string,\n src?: string,\n iframeTitle?: string,\n ): string {\n const title = iframeTitle ? 'title=\"' + iframeTitle + '\"' : '';\n return `<div class=\"lg-video-cont lg-has-iframe\" style=\"width:${iframeWidth}; max-width:${iframeMaxWidth}; height: ${iframeHeight}; max-height:${iframeMaxHeight}\">\n <iframe class=\"lg-object\" frameborder=\"0\" ${title} src=\"${src}\" allowfullscreen=\"true\"></iframe>\n </div>`;\n },\n\n getImgMarkup(\n index: number,\n src: string,\n altAttr: string,\n srcset?: string,\n sizes?: string,\n sources?: ImageSources[],\n ): string {\n const srcsetAttr = srcset ? `srcset=\"${srcset}\"` : '';\n const sizesAttr = sizes ? `sizes=\"${sizes}\"` : '';\n const imgMarkup = `<img ${altAttr} ${srcsetAttr} ${sizesAttr} class=\"lg-object lg-image\" data-index=\"${index}\" src=\"${src}\" />`;\n let sourceTag = '';\n if (sources) {\n const sourceObj =\n typeof sources === 'string' ? JSON.parse(sources) : sources;\n\n sourceTag = sourceObj.map((source: any) => {\n let attrs = '';\n Object.keys(source).forEach((key) => {\n // Do not remove the first space as it is required to separate the attributes\n attrs += ` ${key}=\"${source[key]}\"`;\n });\n return `<source ${attrs}></source>`;\n });\n }\n return `${sourceTag}${imgMarkup}`;\n },\n\n // Get src from responsive src\n getResponsiveSrc(srcItms: string[]): string {\n const rsWidth = [];\n const rsSrc = [];\n let src = '';\n for (let i = 0; i < srcItms.length; i++) {\n const _src = srcItms[i].split(' ');\n\n // Manage empty space\n if (_src[0] === '') {\n _src.splice(0, 1);\n }\n\n rsSrc.push(_src[0]);\n rsWidth.push(_src[1]);\n }\n\n const wWidth = window.innerWidth;\n for (let j = 0; j < rsWidth.length; j++) {\n if (parseInt(rsWidth[j], 10) > wWidth) {\n src = rsSrc[j];\n break;\n }\n }\n return src;\n },\n\n isImageLoaded(img: HTMLImageElement): boolean {\n if (!img) return false;\n // During the onload event, IE correctly identifies any images that\n // weren’t downloaded as not complete. Others should too. Gecko-based\n // browsers act like NS4 in that they report this incorrectly.\n if (!img.complete) {\n return false;\n }\n\n // However, they do have two very useful properties: naturalWidth and\n // naturalHeight. These give the true size of the image. If it failed\n // to load, either of these should be zero.\n if (img.naturalWidth === 0) {\n return false;\n }\n\n // No other way of checking: assume it’s ok.\n return true;\n },\n\n getVideoPosterMarkup(\n _poster: string,\n dummyImg: string,\n videoContStyle: string,\n playVideoString: string,\n _isVideo?: VideoInfo,\n ): string {\n let videoClass = '';\n if (_isVideo && _isVideo.youtube) {\n videoClass = 'lg-has-youtube';\n } else if (_isVideo && _isVideo.vimeo) {\n videoClass = 'lg-has-vimeo';\n } else {\n videoClass = 'lg-has-html5';\n }\n\n return `<div class=\"lg-video-cont ${videoClass}\" style=\"${videoContStyle}\">\n <div class=\"lg-video-play-button\">\n <svg\n viewBox=\"0 0 20 20\"\n preserveAspectRatio=\"xMidYMid\"\n focusable=\"false\"\n aria-labelledby=\"${playVideoString}\"\n role=\"img\"\n class=\"lg-video-play-icon\"\n >\n <title>${playVideoString}</title>\n <polygon class=\"lg-video-play-icon-inner\" points=\"1,0 20,10 1,20\"></polygon>\n </svg>\n <svg class=\"lg-video-play-icon-bg\" viewBox=\"0 0 50 50\" focusable=\"false\">\n <circle cx=\"50%\" cy=\"50%\" r=\"20\"></circle></svg>\n <svg class=\"lg-video-play-icon-circle\" viewBox=\"0 0 50 50\" focusable=\"false\">\n <circle cx=\"50%\" cy=\"50%\" r=\"20\"></circle>\n </svg>\n </div>\n ${dummyImg || ''}\n <img class=\"lg-object lg-video-poster\" src=\"${_poster}\" />\n </div>`;\n },\n\n getFocusableElements(container: HTMLElement): NodeListOf<Element> {\n const elements = container.querySelectorAll(\n '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])',\n );\n const visibleElements = [].filter.call(elements, (element) => {\n const style = window.getComputedStyle(element);\n return style.display !== 'none' && style.visibility !== 'hidden';\n });\n return (visibleElements as unknown) as NodeListOf<Element>;\n },\n\n /**\n * @desc Create dynamic elements array from gallery items when dynamic option is false\n * It helps to avoid frequent DOM interaction\n * and avoid multiple checks for dynamic elments\n *\n * @returns {Array} dynamicEl\n */\n getDynamicOptions(\n items: any,\n extraProps: string[],\n getCaptionFromTitleOrAlt: boolean,\n exThumbImage: string,\n ): GalleryItem[] {\n const dynamicElements: GalleryItem[] = [];\n const availableDynamicOptions = [\n ...defaultDynamicOptions,\n ...extraProps,\n ];\n [].forEach.call(items, (item: HTMLElement) => {\n const dynamicEl: GalleryItem = {} as GalleryItem;\n for (let i = 0; i < item.attributes.length; i++) {\n const attr = item.attributes[i];\n if (attr.specified) {\n const dynamicAttr = convertToData(attr.name);\n let label = '';\n if (availableDynamicOptions.indexOf(dynamicAttr) > -1) {\n label = dynamicAttr;\n }\n if (label) {\n (dynamicEl as any)[label] = attr.value;\n }\n }\n }\n const currentItem = $LG(item);\n const alt = currentItem.find('img').first().attr('alt');\n const title = currentItem.attr('title');\n\n const thumb = exThumbImage\n ? currentItem.attr(exThumbImage)\n : currentItem.find('img').first().attr('src');\n dynamicEl.thumb = thumb;\n\n if (getCaptionFromTitleOrAlt && !dynamicEl.subHtml) {\n dynamicEl.subHtml = title || alt || '';\n }\n dynamicEl.alt = alt || title || '';\n dynamicElements.push(dynamicEl);\n });\n return dynamicElements;\n },\n isMobile(): boolean {\n return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n },\n /**\n * @desc Check the given src is video\n * @param {String} src\n * @return {Object} video type\n * Ex:{ youtube : [\"//www.youtube.com/watch?v=c0asJgSyxcY\", \"c0asJgSyxcY\"] }\n *\n * @todo - this information can be moved to dynamicEl to avoid frequent calls\n */\n\n isVideo(\n src: string,\n isHTML5VIdeo: boolean,\n index: number,\n ): VideoInfo | undefined {\n if (!src) {\n if (isHTML5VIdeo) {\n return {\n html5: true,\n };\n } else {\n console.error(\n 'lightGallery :- data-src is not provided on slide item ' +\n (index + 1) +\n '. Please make sure the selector property is properly configured. More info - https://www.lightgalleryjs.com/demos/html-markup/',\n );\n return;\n }\n }\n\n const youtube = src.match(\n /\\/\\/(?:www\\.)?youtu(?:\\.be|be\\.com|be-nocookie\\.com)\\/(?:watch\\?v=|embed\\/)?([a-z0-9\\-\\_\\%]+)([\\&|?][\\S]*)*/i,\n );\n const vimeo = src.match(\n /\\/\\/(?:www\\.)?(?:player\\.)?vimeo.com\\/(?:video\\/)?([0-9a-z\\-_]+)(.*)?/i,\n );\n const wistia = src.match(\n /https?:\\/\\/(.+)?(wistia\\.com|wi\\.st)\\/(medias|embed)\\/([0-9a-z\\-_]+)(.*)/,\n );\n\n if (youtube) {\n return {\n youtube,\n };\n } else if (vimeo) {\n return {\n vimeo,\n };\n } else if (wistia) {\n return {\n wistia,\n };\n }\n },\n};\n\nexport default utils;\n","import {\n AfterAppendSlideEventDetail,\n AfterAppendSubHtmlDetail,\n BeforeSlideDetail,\n lGEvents,\n SlideItemLoadDetail,\n} from './lg-events';\nimport {\n LightGalleryAllSettings,\n lightGalleryCoreSettings,\n LightGallerySettings,\n} from './lg-settings';\nimport utils, { GalleryItem, ImageSize } from './lg-utils';\nimport { $LG, lgQuery } from './lgQuery';\nimport {\n Coords,\n MediaContainerPosition,\n SlideDirection,\n VideoInfo,\n} from './types';\n\ndeclare let picturefill: any;\n\n// @ref - https://stackoverflow.com/questions/3971841/how-to-resize-images-proportionally-keeping-the-aspect-ratio\n// @ref - https://2ality.com/2017/04/setting-up-multi-platform-packages.html\n\n// Unique id for each gallery\nlet lgId = 0;\n\nexport class LightGallery {\n public settings!: LightGalleryAllSettings;\n public galleryItems!: GalleryItem[];\n\n // Current gallery item\n public lgId!: number;\n\n public el!: HTMLElement;\n public LGel!: lgQuery;\n public lgOpened = false;\n\n public index = 0;\n\n // lightGallery modules\n public plugins: any[] = [];\n\n // false when lightGallery load first slide content;\n public lGalleryOn = false;\n\n // True when a slide animation is in progress\n public lgBusy = false;\n\n // Type of touch action - {swipe, zoomSwipe, pinch}\n public touchAction?: 'swipe' | 'zoomSwipe' | 'pinch';\n\n // Direction of swipe/drag - {horizontal, vertical}\n public swipeDirection?: 'horizontal' | 'vertical';\n\n // Timeout function for hiding controls;\n public hideBarTimeout: any;\n\n public currentItemsInDom: string[] = [];\n\n public outer!: lgQuery;\n\n public items: any;\n\n public $backdrop!: lgQuery;\n public $lgComponents!: lgQuery;\n\n public $container!: lgQuery;\n\n public $inner!: lgQuery;\n public $content!: lgQuery;\n public $toolbar!: lgQuery;\n\n // Scroll top value before lightGallery is opened\n public prevScrollTop = 0;\n\n public bodyPaddingRight = 0;\n\n private zoomFromOrigin!: boolean;\n\n private currentImageSize?: ImageSize;\n\n private isDummyImageRemoved = false;\n\n private dragOrSwipeEnabled = false;\n\n public mediaContainerPosition = {\n top: 0,\n bottom: 0,\n };\n\n constructor(element: HTMLElement, options?: LightGallerySettings) {\n if (!element) {\n return this;\n }\n lgId++;\n this.lgId = lgId;\n\n this.el = element;\n this.LGel = $LG(element);\n\n this.generateSettings(options);\n\n this.buildModules();\n\n // When using dynamic mode, ensure dynamicEl is an array\n if (\n this.settings.dynamic &&\n this.settings.dynamicEl !== undefined &&\n !Array.isArray(this.settings.dynamicEl)\n ) {\n throw 'When using dynamic mode, you must also define dynamicEl as an Array.';\n }\n\n this.galleryItems = this.getItems();\n this.normalizeSettings();\n\n // Gallery items\n\n this.init();\n\n this.validateLicense();\n\n return this;\n }\n\n private generateSettings(options?: LightGallerySettings) {\n // lightGallery settings\n this.settings = {\n ...lightGalleryCoreSettings,\n ...options,\n } as LightGalleryAllSettings;\n if (\n this.settings.isMobile &&\n typeof this.settings.isMobile === 'function'\n ? this.settings.isMobile()\n : utils.isMobile()\n ) {\n const mobileSettings = {\n ...this.settings.mobileSettings,\n ...this.settings.mobileSettings,\n };\n this.settings = { ...this.settings, ...mobileSettings };\n }\n }\n\n private normalizeSettings() {\n if (this.settings.slideEndAnimation) {\n this.settings.hideControlOnEnd = false;\n }\n if (!this.settings.closable) {\n this.settings.swipeToClose = false;\n }\n\n // And reset it on close to get the correct value next time\n this.zoomFromOrigin = this.settings.zoomFromOrigin;\n\n // At the moment, Zoom from image doesn't support dynamic options\n // @todo add zoomFromOrigin support for dynamic images\n if (this.settings.dynamic) {\n this.zoomFromOrigin = false;\n }\n\n if (!this.settings.container) {\n this.settings.container = document.body;\n }\n\n // settings.preload should not be grater than $item.length\n this.settings.preload = Math.min(\n this.settings.preload,\n this.galleryItems.length,\n );\n }\n\n init(): void {\n this.addSlideVideoInfo(this.galleryItems);\n\n this.buildStructure();\n\n this.LGel.trigger(lGEvents.init, {\n instance: this,\n });\n\n if (this.settings.keyPress) {\n this.keyPress();\n }\n\n setTimeout(() => {\n this.enableDrag();\n this.enableSwipe();\n this.triggerPosterClick();\n }, 50);\n\n this.arrow();\n if (this.settings.mousewheel) {\n this.mousewheel();\n }\n\n if (!this.settings.dynamic) {\n this.openGalleryOnItemClick();\n }\n }\n\n openGalleryOnItemClick(): void {\n // Using for loop instead of using bubbling as the items can be any html element.\n for (let index = 0; index < this.items.length; index++) {\n const element = this.items[index];\n const $element = $LG(element);\n // Using different namespace for click because click event should not unbind if selector is same object('this')\n // @todo manage all event listners - should have namespace that represent element\n const uuid = lgQuery.generateUUID();\n $element\n .attr('data-lg-id', uuid)\n .on(`click.lgcustom-item-${uuid}`, (e) => {\n e.preventDefault();\n const currentItemIndex = this.settings.index || index;\n this.openGallery(currentItemIndex, element);\n });\n }\n }\n\n /**\n * Module constructor\n * Modules are build incrementally.\n * Gallery should be opened only once all the modules are initialized.\n * use moduleBuildTimeout to make sure this\n */\n buildModules(): void {\n this.settings.plugins.forEach((plugin) => {\n this.plugins.push(new plugin(this, $LG));\n });\n }\n\n validateLicense(): void {\n if (!this.settings.licenseKey) {\n console.error('Please provide a valid license key');\n } else if (this.settings.licenseKey === '0000-0000-000-0000') {\n console.warn(\n `lightGallery: ${this.settings.licenseKey} license key is not valid for production use`,\n );\n }\n }\n\n getSlideItem(index: number): lgQuery {\n return $LG(this.getSlideItemId(index));\n }\n\n getSlideItemId(index: number): string {\n return `#lg-item-${this.lgId}-${index}`;\n }\n\n getIdName(id: string): string {\n return `${id}-${this.lgId}`;\n }\n getElementById(id: string): lgQuery {\n return $LG(`#${this.getIdName(id)}`);\n }\n\n manageSingleSlideClassName(): void {\n if (this.galleryItems.length < 2) {\n this.outer.addClass('lg-single-item');\n } else {\n this.outer.removeClass('lg-single-item');\n }\n }\n\n buildStructure(): void {\n const container = this.$container && this.$container.get();\n if (container) {\n return;\n }\n let controls = '';\n let subHtmlCont = '';\n\n // Create controls\n if (this.settings.controls) {\n controls = `<button type=\"button\" id=\"${this.getIdName(\n 'lg-prev',\n )}\" aria-label=\"${\n this.settings.strings['previousSlide']\n }\" class=\"lg-prev lg-icon\"> ${this.settings.prevHtml} </button>\n <button type=\"button\" id=\"${this.getIdName(\n 'lg-next',\n )}\" aria-label=\"${\n this.settings.strings['nextSlide']\n }\" class=\"lg-next lg-icon\"> ${this.settings.nextHtml} </button>`;\n }\n\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\n subHtmlCont =\n '<div class=\"lg-sub-html\" role=\"status\" aria-live=\"polite\"></div>';\n }\n\n let addClasses = '';\n\n if (this.settings.allowMediaOverlap) {\n // Do not remove space before last single quote\n addClasses += 'lg-media-overlap ';\n }\n\n const ariaLabelledby = this.settings.ariaLabelledby\n ? 'aria-labelledby=\"' + this.settings.ariaLabelledby + '\"'\n : '';\n const ariaDescribedby = this.settings.ariaDescribedby\n ? 'aria-describedby=\"' + this.settings.ariaDescribedby + '\"'\n : '';\n\n const containerClassName = `lg-container ${this.settings.addClass} ${\n document.body !== this.settings.container ? 'lg-inline' : ''\n }`;\n const closeIcon =\n this.settings.closable && this.settings.showCloseIcon\n ? `<button type=\"button\" aria-label=\"${\n this.settings.strings['closeGallery']\n }\" id=\"${this.getIdName(\n 'lg-close',\n )}\" class=\"lg-close lg-icon\"></button>`\n : '';\n const maximizeIcon = this.settings.showMaximizeIcon\n ? `<button type=\"button\" aria-label=\"${\n this.settings.strings['toggleMaximize']\n }\" id=\"${this.getIdName(\n 'lg-maximize',\n )}\" class=\"lg-maximize lg-icon\"></button>`\n : '';\n const template = `\n <div class=\"${containerClassName}\" id=\"${this.getIdName(\n 'lg-container',\n )}\" tabindex=\"-1\" aria-modal=\"true\" ${ariaLabelledby} ${ariaDescribedby} role=\"dialog\"\n >\n <div id=\"${this.getIdName(\n 'lg-backdrop',\n )}\" class=\"lg-backdrop\"></div>\n\n <div id=\"${this.getIdName(\n 'lg-outer',\n )}\" class=\"lg-outer lg-use-css3 lg-css3 lg-hide-items ${addClasses} \">\n\n <div id=\"${this.getIdName('lg-content')}\" class=\"lg-content\">\n <div id=\"${this.getIdName('lg-inner')}\" class=\"lg-inner\">\n </div>\n ${controls}\n </div>\n <div id=\"${this.getIdName(\n 'lg-toolbar',\n )}\" class=\"lg-toolbar lg-group\">\n ${maximizeIcon}\n ${closeIcon}\n </div>\n ${\n this.settings.appendSubHtmlTo === '.lg-outer'\n ? subHtmlCont\n : ''\n }\n <div id=\"${this.getIdName(\n 'lg-components',\n )}\" class=\"lg-components\">\n ${\n this.settings.appendSubHtmlTo === '.lg-sub-html'\n ? subHtmlCont\n : ''\n }\n </div>\n </div>\n </div>\n `;\n\n $LG(this.settings.container).append(template);\n\n if (document.body !== this.settings.container) {\n $LG(this.settings.container).css('position', 'relative');\n }\n\n this.outer = this.getElementById('lg-outer');\n this.$lgComponents = this.getElementById('lg-components');\n this.$backdrop = this.getElementById('lg-backdrop');\n this.$container = this.getElementById('lg-container');\n this.$inner = this.getElementById('lg-inner');\n this.$content = this.getElementById('lg-content');\n this.$toolbar = this.getElementById('lg-toolbar');\n\n this.$backdrop.css(\n 'transition-duration',\n this.settings.backdropDuration + 'ms',\n );\n\n let outerClassNames = `${this.settings.mode} `;\n\n this.manageSingleSlideClassName();\n\n if (this.settings.enableDrag) {\n outerClassNames += 'lg-grab ';\n }\n\n this.outer.addClass(outerClassNames);\n\n this.$inner.css('transition-timing-function', this.settings.easing);\n this.$inner.css('transition-duration', this.settings.speed + 'ms');\n\n if (this.settings.download) {\n this.$toolbar.append(\n `<a id=\"${this.getIdName(\n 'lg-download',\n )}\" target=\"_blank\" rel=\"noopener\" aria-label=\"${\n this.settings.strings['download']\n }\" download class=\"lg-download lg-icon\"></a>`,\n );\n }\n\n this.counter();\n\n $LG(window).on(\n `resize.lg.global${this.lgId} orientationchange.lg.global${this.lgId}`,\n () => {\n this.refreshOnResize();\n },\n );\n\n this.hideBars();\n\n this.manageCloseGallery();\n this.toggleMaximize();\n\n this.initModules();\n }\n\n refreshOnResize(): void {\n if (this.lgOpened) {\n const currentGalleryItem = this.galleryItems[this.index];\n const { __slideVideoInfo } = currentGalleryItem;\n\n this.mediaContainerPosition = this.getMediaContainerPosition();\n const { top, bottom } = this.mediaContainerPosition;\n this.currentImageSize = utils.getSize(\n this.items[this.index],\n this.outer,\n top + bottom,\n __slideVideoInfo && this.settings.videoMaxSize,\n );\n if (__slideVideoInfo) {\n this.resizeVideoSlide(this.index, this.currentImageSize);\n }\n if (this.zoomFromOrigin && !this.isDummyImageRemoved) {\n const imgStyle = this.getDummyImgStyles(this.currentImageSize);\n this.outer\n .find('.lg-current .lg-dummy-img')\n .first()\n .attr('style', imgStyle);\n }\n this.LGel.trigger(lGEvents.containerResize);\n }\n }\n\n resizeVideoSlide(index: number, imageSize?: ImageSize): void {\n const lgVideoStyle = this.getVideoContStyle(imageSize);\n const currentSlide = this.getSlideItem(index);\n currentSlide.find('.lg-video-cont').attr('style', lgVideoStyle);\n }\n\n /**\n * Update slides dynamically.\n * Add, edit or delete slides dynamically when lightGallery is opened.\n * Modify the current gallery items and pass it via updateSlides method\n * @note\n * - Do not mutate existing lightGallery items directly.\n * - Always pass new list of gallery items\n * - You need to take care of thumbnails outside the gallery if any\n * - user this method only if you want to update slides when the gallery is opened. Otherwise, use `refresh()` method.\n * @param items Gallery items\n * @param index After the update operation, which slide gallery should navigate to\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n *\n * // Adding slides dynamically\n * let galleryItems = [\n * // Access existing lightGallery items\n * // galleryItems are automatically generated internally from the gallery HTML markup\n * // or directly from galleryItems when dynamic gallery is used\n * ...plugin.galleryItems,\n * ...[\n * {\n * src: 'img/img-1.png',\n * thumb: 'img/thumb1.png',\n * },\n * ],\n * ];\n * plugin.updateSlides(\n * galleryItems,\n * plugin.index,\n * );\n *\n *\n * // Remove slides dynamically\n * galleryItems = JSON.parse(\n * JSON.stringify(updateSlideInstance.galleryItems),\n * );\n * galleryItems.shift();\n * updateSlideInstance.updateSlides(galleryItems, 1);\n * @see <a href=\"/demos/update-slides/\">Demo</a>\n */\n updateSlides(items: GalleryItem[], index: number): void {\n if (this.index > items.length - 1) {\n this.index = items.length - 1;\n }\n if (items.length === 1) {\n this.index = 0;\n }\n if (!items.length) {\n this.closeGallery();\n return;\n }\n const currentSrc = this.galleryItems[index].src;\n this.galleryItems = items;\n this.updateControls();\n this.$inner.empty();\n this.currentItemsInDom = [];\n\n let _index = 0;\n // Find the current index based on source value of the slide\n this.galleryItems.some((galleryItem, itemIndex) => {\n if (galleryItem.src === currentSrc) {\n _index = itemIndex;\n return true;\n }\n return false;\n });\n\n this.currentItemsInDom = this.organizeSlideItems(_index, -1);\n this.loadContent(_index, true);\n this.getSlideItem(_index).addClass('lg-current');\n\n this.index = _index;\n this.updateCurrentCounter(_index);\n this.LGel.trigger(lGEvents.updateSlides);\n }\n\n // Get gallery items based on multiple conditions\n getItems(): GalleryItem[] {\n // Gallery items\n this.items = [];\n if (!this.settings.dynamic) {\n if (this.settings.selector === 'this') {\n this.items.push(this.el);\n } else if (this.settings.selector) {\n if (typeof this.settings.selector === 'string') {\n if (this.settings.selectWithin) {\n const selectWithin = $LG(this.settings.selectWithin);\n this.items = selectWithin\n .find(this.settings.selector)\n .get();\n } else {\n this.items = this.el.querySelectorAll(\n this.settings.selector,\n );\n }\n } else {\n this.items = this.settings.selector;\n }\n } else {\n this.items = this.el.children;\n }\n return utils.getDynamicOptions(\n this.items,\n this.settings.extraProps,\n this.settings.getCaptionFromTitleOrAlt,\n this.settings.exThumbImage,\n );\n } else {\n return this.settings.dynamicEl || [];\n }\n }\n\n shouldHideScrollbar(): boolean {\n return (\n this.settings.hideScrollbar &&\n document.body === this.settings.container\n );\n }\n\n hideScrollbar(): void {\n if (!this.shouldHideScrollbar()) {\n return;\n }\n this.bodyPaddingRight = parseFloat($LG('body').style().paddingRight);\n const bodyRect = document.documentElement.getBoundingClientRect();\n const scrollbarWidth = window.innerWidth - bodyRect.width;\n\n $LG(document.body).css(\n 'padding-right',\n scrollbarWidth + this.bodyPaddingRight + 'px',\n );\n $LG(document.body).addClass('lg-overlay-open');\n }\n\n resetScrollBar(): void {\n if (!this.shouldHideScrollbar()) {\n return;\n }\n $LG(document.body).css('padding-right', this.bodyPaddingRight + 'px');\n $LG(document.body).removeClass('lg-overlay-open');\n }\n\n /**\n * Open lightGallery.\n * Open gallery with specific slide by passing index of the slide as parameter.\n * @category lGPublicMethods\n * @param {Number} index - index of the slide\n * @param {HTMLElement} element - Which image lightGallery should zoom from\n *\n * @example\n * const $dynamicGallery = document.getElementById('dynamic-gallery-demo');\n * const dynamicGallery = lightGallery($dynamicGallery, {\n * dynamic: true,\n * dynamicEl: [\n * {\n * src: 'img/1.jpg',\n * thumb: 'img/thumb-1.jpg',\n * subHtml: '<h4>Image 1 title</h4><p>Image 1 descriptions.</p>',\n * },\n * ...\n * ],\n * });\n * $dynamicGallery.addEventListener('click', function () {\n * // Starts with third item.(Optional).\n * // This is useful if you want use dynamic mode with\n * // custom thumbnails (thumbnails outside gallery),\n * dynamicGallery.openGallery(2);\n * });\n *\n */\n openGallery(index = this.settings.index, element?: HTMLElement): void {\n // prevent accidental double execution\n if (this.lgOpened) return;\n this.lgOpened = true;\n this.outer.removeClass('lg-hide-items');\n\n this.hideScrollbar();\n\n // Add display block, but still has opacity 0\n this.$container.addClass('lg-show');\n\n const itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(\n index,\n index,\n );\n this.currentItemsInDom = itemsToBeInsertedToDom;\n\n let items = '';\n itemsToBeInsertedToDom.forEach((item) => {\n items = items + `<div id=\"${item}\" class=\"lg-item\"></div>`;\n });\n\n this.$inner.append(items);\n this.addHtml(index);\n let transform: string | undefined = '';\n this.mediaContainerPosition = this.getMediaContainerPosition();\n const { top, bottom } = this.mediaContainerPosition;\n if (!this.settings.allowMediaOverlap) {\n this.setMediaContainerPosition(top, bottom);\n }\n const { __slideVideoInfo } = this.galleryItems[index];\n if (this.zoomFromOrigin && element) {\n this.currentImageSize = utils.getSize(\n element,\n this.outer,\n top + bottom,\n __slideVideoInfo && this.settings.videoMaxSize,\n );\n transform = utils.getTransform(\n element,\n this.outer,\n top,\n bottom,\n this.currentImageSize,\n );\n }\n if (!this.zoomFromOrigin || !transform) {\n this.outer.addClass(this.settings.startClass);\n this.getSlideItem(index).removeClass('lg-complete');\n }\n const timeout = this.settings.zoomFromOrigin\n ? 100\n : this.settings.backdropDuration;\n setTimeout(() => {\n this.outer.addClass('lg-components-open');\n }, timeout);\n this.index = index;\n this.LGel.trigger(lGEvents.beforeOpen);\n\n // add class lg-current to remove initial transition\n this.getSlideItem(index).addClass('lg-current');\n\n this.lGalleryOn = false;\n // Store the current scroll top value to scroll back after closing the gallery..\n this.prevScrollTop = $LG(window).scrollTop();\n\n setTimeout(() => {\n // Need to check both zoomFromOrigin and transform values as we need to set set the\n // default opening animation if user missed to add the lg-size attribute\n\n if (this.zoomFromOrigin && transform) {\n const currentSlide = this.getSlideItem(index);\n currentSlide.css('transform', transform);\n setTimeout(() => {\n currentSlide\n .addClass('lg-start-progress lg-start-end-progress')\n .css(\n 'transition-duration',\n this.settings.startAnimationDuration + 'ms',\n );\n this.outer.addClass('lg-zoom-from-image');\n });\n setTimeout(() => {\n currentSlide.css('transform', 'translate3d(0, 0, 0)');\n }, 100);\n }\n\n setTimeout(() => {\n this.$backdrop.addClass('in');\n this.$container.addClass('lg-show-in');\n }, 10);\n\n setTimeout(() => {\n if (\n this.settings.trapFocus &&\n document.body === this.settings.container\n ) {\n this.trapFocus();\n }\n }, this.settings.backdropDuration + 50);\n\n // lg-visible class resets gallery opacity to 1\n if (!this.zoomFromOrigin || !transform) {\n setTimeout(() => {\n this.outer.addClass('lg-visible');\n }, this.settings.backdropDuration);\n }\n\n // initiate slide function\n this.slide(index, false, false, false);\n\n this.LGel.trigger(lGEvents.afterOpen);\n });\n\n if (document.body === this.settings.container) {\n $LG('html').addClass('lg-on');\n }\n }\n\n /**\n * Note - Changing the position of the media on every slide transition creates a flickering effect.\n * Therefore, The height of the caption is calculated dynamically, only once based on the first slide caption.\n * if you have dynamic captions for each media,\n * you can provide an appropriate height for the captions via allowMediaOverlap option\n */\n public getMediaContainerPosition(): MediaContainerPosition {\n if (this.settings.allowMediaOverlap) {\n return {\n top: 0,\n bottom: 0,\n };\n }\n const top = this.$toolbar.get().clientHeight || 0;\n const subHtml = this.outer.find('.lg-components .lg-sub-html').get();\n const captionHeight =\n this.settings.defaultCaptionHeight ||\n (subHtml && subHtml.clientHeight) ||\n 0;\n const thumbContainer = this.outer.find('.lg-thumb-outer').get();\n const thumbHeight = thumbContainer ? thumbContainer.clientHeight : 0;\n const bottom = thumbHeight + captionHeight;\n return {\n top,\n bottom,\n };\n }\n\n private setMediaContainerPosition(top = 0, bottom = 0): void {\n this.$content.css('top', top + 'px').css('bottom', bottom + 'px');\n }\n\n hideBars(): void {\n // Hide controllers if mouse doesn't move for some period\n setTimeout(() => {\n this.outer.removeClass('lg-hide-items');\n if (this.settings.hideBarsDelay > 0) {\n this.outer.on('mousemove.lg click.lg touchstart.lg', () => {\n this.outer.removeClass('lg-hide-items');\n\n clearTimeout(this.hideBarTimeout);\n\n // Timeout will be cleared on each slide movement also\n this.hideBarTimeout = setTimeout(() => {\n this.outer.addClass('lg-hide-items');\n }, this.settings.hideBarsDelay);\n });\n this.outer.trigger('mousemove.lg');\n }\n }, this.settings.showBarsAfter);\n }\n\n initPictureFill($img: lgQuery): void {\n if (this.settings.supportLegacyBrowser) {\n try {\n picturefill({\n elements: [$img.get()],\n });\n } catch (e) {\n console.warn(\n 'lightGallery :- If you want srcset or picture tag to be supported for older browser please include picturefil javascript library in your document.',\n );\n }\n }\n }\n\n /**\n * @desc Create image counter\n * Ex: 1/10\n */\n counter(): void {\n if (this.settings.counter) {\n const counterHtml = `<div class=\"lg-counter\" role=\"status\" aria-live=\"polite\">\n <span id=\"${this.getIdName(\n 'lg-counter-current',\n )}\" class=\"lg-counter-current\">${this.index + 1} </span> /\n <span id=\"${this.getIdName(\n 'lg-counter-all',\n )}\" class=\"lg-counter-all\">${\n this.galleryItems.length\n } </span></div>`;\n this.outer.find(this.settings.appendCounterTo).append(counterHtml);\n }\n }\n\n /**\n * @desc add sub-html into the slide\n * @param {Number} index - index of the slide\n */\n addHtml(index: number): void {\n let subHtml;\n let subHtmlUrl;\n if (this.galleryItems[index].subHtmlUrl) {\n subHtmlUrl = this.galleryItems[index].subHtmlUrl;\n } else {\n subHtml = this.galleryItems[index].subHtml;\n }\n\n if (!subHtmlUrl) {\n if (subHtml) {\n // get first letter of sub-html\n // if first letter starts with . or # get the html form the jQuery object\n const fL = subHtml.substring(0, 1);\n if (fL === '.' || fL === '#') {\n if (\n this.settings.subHtmlSelectorRelative &&\n !this.settings.dynamic\n ) {\n subHtml = $LG(this.items)\n .eq(index)\n .find(subHtml)\n .first()\n .html();\n } else {\n subHtml = $LG(subHtml).first().html();\n }\n }\n } else {\n subHtml = '';\n }\n }\n\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\n if (subHtmlUrl) {\n this.outer.find('.lg-sub-html').load(subHtmlUrl);\n } else {\n this.outer.find('.lg-sub-html').html(subHtml as string);\n }\n } else {\n const currentSlide = $LG(this.getSlideItemId(index));\n if (subHtmlUrl) {\n currentSlide.load(subHtmlUrl);\n } else {\n currentSlide.append(\n `<div class=\"lg-sub-html\">${subHtml}</div>`,\n );\n }\n }\n\n // Add lg-empty-html class if title doesn't exist\n if (typeof subHtml !== 'undefined' && subHtml !== null) {\n if (subHtml === '') {\n this.outer\n .find(this.settings.appendSubHtmlTo)\n .addClass('lg-empty-html');\n } else {\n this.outer\n .find(this.settings.appendSubHtmlTo)\n .removeClass('lg-empty-html');\n }\n }\n\n this.LGel.trigger<AfterAppendSubHtmlDetail>(\n lGEvents.afterAppendSubHtml,\n {\n index,\n },\n );\n }\n\n /**\n * @desc Preload slides\n * @param {Number} index - index of the slide\n * @todo preload not working for the first slide, Also, should work for the first and last slide as well\n */\n preload(index: number): void {\n for (let i = 1; i <= this.settings.preload; i++) {\n if (i >= this.galleryItems.length - index) {\n break;\n }\n\n this.loadContent(index + i, false);\n }\n\n for (let j = 1; j <= this.settings.preload; j++) {\n if (index - j < 0) {\n break;\n }\n\n this.loadContent(index - j, false);\n }\n }\n\n getDummyImgStyles(imageSize?: ImageSize): string {\n if (!imageSize) return '';\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`;\n }\n getVideoContStyle(imageSize?: ImageSize): string {\n if (!imageSize) return '';\n return `width:${imageSize.width}px;\n height:${imageSize.height}px`;\n }\n\n getDummyImageContent(\n $currentSlide: lgQuery,\n index: number,\n alt: string,\n ): string {\n let $currentItem;\n if (!this.settings.dynamic) {\n $currentItem = $LG(this.items).eq(index);\n }\n if ($currentItem) {\n let _dummyImgSrc;\n if (!this.settings.exThumbImage) {\n _dummyImgSrc = $currentItem.find('img').first().attr('src');\n } else {\n _dummyImgSrc = $currentItem.attr(this.settings.exThumbImage);\n }\n if (!_dummyImgSrc) return '';\n const imgStyle = this.getDummyImgStyles(this.currentImageSize);\n const dummyImgContent = `<img ${alt} style=\"${imgStyle}\" class=\"lg-dummy-img\" src=\"${_dummyImgSrc}\" />`;\n\n $currentSlide.addClass('lg-first-slide');\n this.outer.addClass('lg-first-slide-loading');\n\n return dummyImgContent;\n }\n return '';\n }\n\n setImgMarkup(src: string, $currentSlide: lgQuery, index: number): void {\n const currentGalleryItem = this.galleryItems[index];\n const { alt, srcset, sizes, sources } = currentGalleryItem;\n\n // Use the thumbnail as dummy image which will be resized to actual image size and\n // displayed on top of actual image\n let imgContent = '';\n const altAttr = alt ? 'alt=\"' + alt + '\"' : '';\n\n if (this.isFirstSlideWithZoomAnimation()) {\n imgContent = this.getDummyImageContent(\n $currentSlide,\n index,\n altAttr,\n );\n } else {\n imgContent = utils.getImgMarkup(\n index,\n src,\n altAttr,\n srcset,\n sizes,\n sources,\n );\n }\n const imgMarkup = `<picture class=\"lg-img-wrap\"> ${imgContent}</picture>`;\n $currentSlide.prepend(imgMarkup);\n }\n\n onSlideObjectLoad(\n $slide: lgQuery,\n isHTML5VideoWithoutPoster: boolean,\n onLoad: () => void,\n onError: () => void,\n ): void {\n const mediaObject = $slide.find('.lg-object').first();\n if (\n utils.isImageLoaded(mediaObject.get() as HTMLImageElement) ||\n isHTML5VideoWithoutPoster\n ) {\n onLoad();\n } else {\n mediaObject.on('load.lg error.lg', () => {\n onLoad && onLoad();\n });\n mediaObject.on('error.lg', () => {\n onError && onError();\n });\n }\n }\n\n /**\n *\n * @param $el Current slide item\n * @param index\n * @param delay Delay is 0 except first time\n * @param speed Speed is same as delay, except it is 0 if gallery is opened via hash plugin\n * @param isFirstSlide\n */\n onLgObjectLoad(\n currentSlide: lgQuery,\n index: number,\n delay: number,\n speed: number,\n isFirstSlide: boolean,\n isHTML5VideoWithoutPoster: boolean,\n ): void {\n this.onSlideObjectLoad(\n currentSlide,\n isHTML5VideoWithoutPoster,\n () => {\n this.triggerSlideItemLoad(\n currentSlide,\n index,\n delay,\n speed,\n isFirstSlide,\n );\n },\n () => {\n currentSlide.addClass('lg-complete lg-complete_');\n currentSlide.html(\n '<span class=\"lg-error-msg\">Oops... Failed to load content...</span>',\n );\n },\n );\n }\n\n triggerSlideItemLoad(\n $currentSlide: lgQuery,\n index: number,\n delay: number,\n speed: number,\n isFirstSlide: boolean,\n ): void {\n const currentGalleryItem = this.galleryItems[index];\n\n // Adding delay for video slides without poster for better performance and user experience\n // Videos should start playing once once the gallery is completely loaded\n const _speed =\n isFirstSlide &&\n this.getSlideType(currentGalleryItem) === 'video' &&\n !currentGalleryItem.poster\n ? speed\n : 0;\n setTimeout(() => {\n $currentSlide.addClass('lg-complete lg-complete_');\n this.LGel.trigger<SlideItemLoadDetail>(lGEvents.slideItemLoad, {\n index,\n delay: delay || 0,\n isFirstSlide,\n });\n }, _speed);\n }\n\n isFirstSlideWithZoomAnimation(): boolean {\n return !!(\n !this.lGalleryOn &&\n this.zoomFromOrigin &&\n this.currentImageSize\n );\n }\n\n // Add video slideInfo\n addSlideVideoInfo(items: GalleryItem[]): void {\n items.forEach((element, index) => {\n element.__slideVideoInfo = utils.isVideo(\n element.src as string,\n !!element.video,\n index,\n );\n if (\n element.__slideVideoInfo &&\n this.settings.loadYouTubePoster &&\n !element.poster &&\n element.__slideVideoInfo.youtube\n ) {\n element.poster = `//img.youtube.com/vi/${element.__slideVideoInfo.youtube[1]}/maxresdefault.jpg`;\n }\n });\n }\n\n /**\n * Load slide content into slide.\n * This is used to load content into slides that is not visible too\n * @param {Number} index - index of the slide.\n * @param {Boolean} rec - if true call loadcontent() function again.\n */\n loadContent(index: number, rec: boolean): void {\n const currentGalleryItem = this.galleryItems[index];\n const $currentSlide = $LG(this.getSlideItemId(index));\n\n const { poster, srcset, sizes, sources } = currentGalleryItem;\n let { src } = currentGalleryItem;\n\n const video = currentGalleryItem.video;\n\n const _html5Video =\n video && typeof video === 'string' ? JSON.parse(video) : video;\n\n if (currentGalleryItem.responsive) {\n const srcDyItms = currentGalleryItem.responsive.split(',');\n src = utils.getResponsiveSrc(srcDyItms) || src;\n }\n\n const videoInfo = currentGalleryItem.__slideVideoInfo;\n let lgVideoStyle = '';\n\n const iframe = !!currentGalleryItem.iframe;\n\n const isFirstSlide = !this.lGalleryOn;\n\n // delay for adding complete class. it is 0 except first time.\n let delay = 0;\n if (isFirstSlide) {\n if (this.zoomFromOrigin && this.currentImageSize) {\n delay = this.settings.startAnimationDuration + 10;\n } else {\n delay = this.settings.backdropDuration + 10;\n }\n }\n\n if (!$currentSlide.hasClass('lg-loaded')) {\n if (videoInfo) {\n const { top, bottom } = this.mediaContainerPosition;\n const videoSize = utils.getSize(\n this.items[index],\n this.outer,\n top + bottom,\n videoInfo && this.settings.videoMaxSize,\n );\n lgVideoStyle = this.getVideoContStyle(videoSize);\n }\n if (iframe) {\n const markup = utils.getIframeMarkup(\n this.settings.iframeWidth,\n this.settings.iframeHeight,\n this.settings.iframeMaxWidth,\n this.settings.iframeMaxHeight,\n src,\n currentGalleryItem.iframeTitle,\n );\n $currentSlide.prepend(markup);\n } else if (poster) {\n let dummyImg = '';\n const hasStartAnimation =\n isFirstSlide &&\n this.zoomFromOrigin &&\n this.currentImageSize;\n if (hasStartAnimation) {\n dummyImg = this.getDummyImageContent(\n $currentSlide,\n index,\n '',\n );\n }\n\n const markup = utils.getVideoPosterMarkup(\n poster,\n dummyImg || '',\n lgVideoStyle,\n this.settings.strings['playVideo'],\n videoInfo,\n );\n $currentSlide.prepend(markup);\n } else if (videoInfo) {\n const markup = `<div class=\"lg-video-cont \" style=\"${lgVideoStyle}\"></div>`;\n $currentSlide.prepend(markup);\n } else {\n this.setImgMarkup(src as string, $currentSlide, index);\n if (srcset || sources) {\n const $img = $currentSlide.find('.lg-object');\n this.initPictureFill($img);\n }\n }\n if (poster || videoInfo) {\n this.LGel.trigger(lGEvents.hasVideo, {\n index,\n src: src,\n html5Video: _html5Video,\n hasPoster: !!poster,\n });\n }\n\n this.LGel.trigger<AfterAppendSlideEventDetail>(\n lGEvents.afterAppendSlide,\n { index },\n );\n\n if (\n this.lGalleryOn &&\n this.settings.appendSubHtmlTo === '.lg-item'\n ) {\n this.addHtml(index);\n }\n }\n\n // For first time add some delay for displaying the start animation.\n let _speed = 0;\n\n // Do not change the delay value because it is required for zoom plugin.\n // If gallery opened from direct url (hash) speed value should be 0\n if (delay && !$LG(document.body).hasClass('lg-from-hash')) {\n _speed = delay;\n }\n\n // Only for first slide and zoomFromOrigin is enabled\n if (this.isFirstSlideWithZoomAnimation()) {\n setTimeout(() => {\n $currentSlide\n .removeClass('lg-start-end-progress lg-start-progress')\n .removeAttr('style');\n }, this.settings.startAnimationDuration + 100);\n if (!$currentSlide.hasClass('lg-loaded')) {\n setTimeout(() => {\n if (this.getSlideType(currentGalleryItem) === 'image') {\n const { alt } = currentGalleryItem;\n const altAttr = alt ? 'alt=\"' + alt + '\"' : '';\n\n $currentSlide\n .find('.lg-img-wrap')\n .append(\n utils.getImgMarkup(\n index,\n src as string,\n altAttr,\n srcset,\n sizes,\n currentGalleryItem.sources,\n ),\n );\n if (srcset || sources) {\n const $img = $currentSlide.find('.lg-object');\n this.initPictureFill($img);\n }\n }\n if (\n this.getSlideType(currentGalleryItem) === 'image' ||\n (this.getSlideType(currentGalleryItem) === 'video' &&\n poster)\n ) {\n this.onLgObjectLoad(\n $currentSlide,\n index,\n delay,\n _speed,\n true,\n false,\n );\n\n // load remaining slides once the slide is completely loaded\n this.onSlideObjectLoad(\n $currentSlide,\n !!(videoInfo && videoInfo.html5 && !poster),\n () => {\n this.loadContentOnFirstSlideLoad(\n index,\n $currentSlide,\n _speed,\n );\n },\n () => {\n this.loadContentOnFirstSlideLoad(\n index,\n $currentSlide,\n _speed,\n );\n },\n );\n }\n }, this.settings.startAnimationDuration + 100);\n }\n }\n\n // SLide content has been added to dom\n $currentSlide.addClass('lg-loaded');\n\n if (\n !this.isFirstSlideWithZoomAnimation() ||\n (this.getSlideType(currentGalleryItem) === 'video' && !poster)\n ) {\n this.onLgObjectLoad(\n $currentSlide,\n index,\n delay,\n _speed,\n isFirstSlide,\n !!(videoInfo && videoInfo.html5 && !poster),\n );\n }\n\n // When gallery is opened once content is loaded (second time) need to add lg-complete class for css styling\n if (\n (!this.zoomFromOrigin || !this.currentImageSize) &&\n $currentSlide.hasClass('lg-complete_') &&\n !this.lGalleryOn\n ) {\n setTimeout(() => {\n $currentSlide.addClass('lg-complete');\n }, this.settings.backdropDuration);\n }\n\n // Content loaded\n // Need to set lGalleryOn before calling preload function\n this.lGalleryOn = true;\n\n if (rec === true) {\n if (!$currentSlide.hasClass('lg-complete_')) {\n $currentSlide\n .find('.lg-object')\n .first()\n .on('load.lg error.lg', () => {\n this.preload(index);\n });\n } else {\n this.preload(index);\n }\n }\n }\n\n /**\n * @desc Remove dummy image content and load next slides\n * Called only for the first time if zoomFromOrigin animation is enabled\n * @param index\n * @param $currentSlide\n * @param speed\n */\n loadContentOnFirstSlideLoad(\n index: number,\n $currentSlide: lgQuery,\n speed: number,\n ): void {\n setTimeout(() => {\n $currentSlide.find('.lg-dummy-img').remove();\n $currentSlide.removeClass('lg-first-slide');\n this.outer.removeClass('lg-first-slide-loading');\n this.isDummyImageRemoved = true;\n this.preload(index);\n }, speed + 300);\n }\n\n getItemsToBeInsertedToDom(\n index: number,\n prevIndex: number,\n numberOfItems = 0,\n ): string[] {\n const itemsToBeInsertedToDom: string[] = [];\n // Minimum 2 items should be there\n let possibleNumberOfItems = Math.max(numberOfItems, 3);\n possibleNumberOfItems = Math.min(\n possibleNumberOfItems,\n this.galleryItems.length,\n );\n const prevIndexItem = `lg-item-${this.lgId}-${prevIndex}`;\n if (this.galleryItems.length <= 3) {\n this.galleryItems.forEach((_element, index) => {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${index}`);\n });\n return itemsToBeInsertedToDom;\n }\n\n if (index < (this.galleryItems.length - 1) / 2) {\n for (\n let idx = index;\n idx > index - possibleNumberOfItems / 2 && idx >= 0;\n idx--\n ) {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${idx}`);\n }\n const numberOfExistingItems = itemsToBeInsertedToDom.length;\n for (\n let idx = 0;\n idx < possibleNumberOfItems - numberOfExistingItems;\n idx++\n ) {\n itemsToBeInsertedToDom.push(\n `lg-item-${this.lgId}-${index + idx + 1}`,\n );\n }\n } else {\n for (\n let idx = index;\n idx <= this.galleryItems.length - 1 &&\n idx < index + possibleNumberOfItems / 2;\n idx++\n ) {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${idx}`);\n }\n const numberOfExistingItems = itemsToBeInsertedToDom.length;\n for (\n let idx = 0;\n idx < possibleNumberOfItems - numberOfExistingItems;\n idx++\n ) {\n itemsToBeInsertedToDom.push(\n `lg-item-${this.lgId}-${index - idx - 1}`,\n );\n }\n }\n if (this.settings.loop) {\n if (index === this.galleryItems.length - 1) {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${0}`);\n } else if (index === 0) {\n itemsToBeInsertedToDom.push(\n `lg-item-${this.lgId}-${this.galleryItems.length - 1}`,\n );\n }\n }\n if (itemsToBeInsertedToDom.indexOf(prevIndexItem) === -1) {\n itemsToBeInsertedToDom.push(`lg-item-${this.lgId}-${prevIndex}`);\n }\n\n return itemsToBeInsertedToDom;\n }\n\n organizeSlideItems(index: number, prevIndex: number): string[] {\n const itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(\n index,\n prevIndex,\n this.settings.numberOfSlideItemsInDom,\n );\n\n itemsToBeInsertedToDom.forEach((item) => {\n if (this.currentItemsInDom.indexOf(item) === -1) {\n this.$inner.append(`<div id=\"${item}\" class=\"lg-item\"></div>`);\n }\n });\n\n this.currentItemsInDom.forEach((item) => {\n if (itemsToBeInsertedToDom.indexOf(item) === -1) {\n $LG(`#${item}`).remove();\n }\n });\n return itemsToBeInsertedToDom;\n }\n\n /**\n * Get previous index of the slide\n */\n getPreviousSlideIndex(): number {\n let prevIndex = 0;\n try {\n const currentItemId = this.outer\n .find('.lg-current')\n .first()\n .attr('id');\n prevIndex = parseInt(currentItemId.split('-')[3]) || 0;\n } catch (error) {\n prevIndex = 0;\n }\n return prevIndex;\n }\n\n setDownloadValue(index: number): void {\n if (this.settings.download) {\n const currentGalleryItem = this.galleryItems[index];\n const hideDownloadBtn =\n currentGalleryItem.downloadUrl === false ||\n currentGalleryItem.downloadUrl === 'false';\n if (hideDownloadBtn) {\n this.outer.addClass('lg-hide-download');\n } else {\n const $download = this.getElementById('lg-download');\n this.outer.removeClass('lg-hide-download');\n $download.attr(\n 'href',\n currentGalleryItem.downloadUrl ||\n (currentGalleryItem.src as string),\n );\n if (currentGalleryItem.download) {\n $download.attr('download', currentGalleryItem.download);\n }\n }\n }\n }\n\n makeSlideAnimation(\n direction: 'next' | 'prev',\n currentSlideItem: lgQuery,\n previousSlideItem: lgQuery,\n ): void {\n if (this.lGalleryOn) {\n previousSlideItem.addClass('lg-slide-progress');\n }\n setTimeout(\n () => {\n // remove all transitions\n this.outer.addClass('lg-no-trans');\n\n this.outer\n .find('.lg-item')\n .removeClass('lg-prev-slide lg-next-slide');\n\n if (direction === 'prev') {\n //prevslide\n currentSlideItem.addClass('lg-prev-slide');\n previousSlideItem.addClass('lg-next-slide');\n } else {\n // next slide\n currentSlideItem.addClass('lg-next-slide');\n previousSlideItem.addClass('lg-prev-slide');\n }\n\n // give 50 ms for browser to add/remove class\n setTimeout(() => {\n this.outer.find('.lg-item').removeClass('lg-current');\n\n currentSlideItem.addClass('lg-current');\n\n // reset all transitions\n this.outer.removeClass('lg-no-trans');\n }, 50);\n },\n this.lGalleryOn ? this.settings.slideDelay : 0,\n );\n }\n\n /**\n * Goto a specific slide.\n * @param {Number} index - index of the slide\n * @param {Boolean} fromTouch - true if slide function called via touch event or mouse drag\n * @param {Boolean} fromThumb - true if slide function called via thumbnail click\n * @param {String} direction - Direction of the slide(next/prev)\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * // to go to 3rd slide\n * plugin.slide(2);\n *\n */\n slide(\n index: number,\n fromTouch?: boolean,\n fromThumb?: boolean,\n direction?: SlideDirection | false,\n ): void {\n const prevIndex = this.getPreviousSlideIndex();\n this.currentItemsInDom = this.organizeSlideItems(index, prevIndex);\n\n // Prevent multiple call, Required for hsh plugin\n if (this.lGalleryOn && prevIndex === index) {\n return;\n }\n\n const numberOfGalleryItems = this.galleryItems.length;\n\n if (!this.lgBusy) {\n if (this.settings.counter) {\n this.updateCurrentCounter(index);\n }\n\n const currentSlideItem = this.getSlideItem(index);\n const previousSlideItem = this.getSlideItem(prevIndex);\n\n const currentGalleryItem = this.galleryItems[index];\n const videoInfo = currentGalleryItem.__slideVideoInfo;\n\n this.outer.attr(\n 'data-lg-slide-type',\n this.getSlideType(currentGalleryItem),\n );\n this.setDownloadValue(index);\n\n if (videoInfo) {\n const { top, bottom } = this.mediaContainerPosition;\n const videoSize = utils.getSize(\n this.items[index],\n this.outer,\n top + bottom,\n videoInfo && this.settings.videoMaxSize,\n );\n this.resizeVideoSlide(index, videoSize);\n }\n\n this.LGel.trigger<BeforeSlideDetail>(lGEvents.beforeSlide, {\n prevIndex,\n index,\n fromTouch: !!fromTouch,\n fromThumb: !!fromThumb,\n });\n\n this.lgBusy = true;\n\n clearTimeout(this.hideBarTimeout);\n\n this.arrowDisable(index);\n\n if (!direction) {\n if (index < prevIndex) {\n direction = 'prev';\n } else if (index > prevIndex) {\n direction = 'next';\n }\n }\n\n if (!fromTouch) {\n this.makeSlideAnimation(\n direction as SlideDirection,\n currentSlideItem,\n previousSlideItem,\n );\n } else {\n this.outer\n .find('.lg-item')\n .removeClass('lg-prev-slide lg-current lg-next-slide');\n let touchPrev;\n let touchNext;\n if (numberOfGalleryItems > 2) {\n touchPrev = index - 1;\n touchNext = index + 1;\n\n if (index === 0 && prevIndex === numberOfGalleryItems - 1) {\n // next slide\n touchNext = 0;\n touchPrev = numberOfGalleryItems - 1;\n } else if (\n index === numberOfGalleryItems - 1 &&\n prevIndex === 0\n ) {\n // prev slide\n touchNext = 0;\n touchPrev = numberOfGalleryItems - 1;\n }\n } else {\n touchPrev = 0;\n touchNext = 1;\n }\n\n if (direction === 'prev') {\n this.getSlideItem(touchNext).addClass('lg-next-slide');\n } else {\n this.getSlideItem(touchPrev).addClass('lg-prev-slide');\n }\n\n currentSlideItem.addClass('lg-current');\n }\n\n // Do not put load content in set timeout as it needs to load immediately when the gallery is opened\n if (!this.lGalleryOn) {\n this.loadContent(index, true);\n } else {\n setTimeout(() => {\n this.loadContent(index, true);\n // Add title if this.settings.appendSubHtmlTo === lg-sub-html\n if (this.settings.appendSubHtmlTo !== '.lg-item') {\n this.addHtml(index);\n }\n }, this.settings.speed + 50 + (fromTouch ? 0 : this.settings.slideDelay));\n }\n\n setTimeout(() => {\n this.lgBusy = false;\n previousSlideItem.removeClass('lg-slide-progress');\n this.LGel.trigger(lGEvents.afterSlide, {\n prevIndex: prevIndex,\n index,\n fromTouch,\n fromThumb,\n });\n }, (this.lGalleryOn ? this.settings.speed + 100 : 100) + (fromTouch ? 0 : this.settings.slideDelay));\n }\n\n this.index = index;\n }\n\n updateCurrentCounter(index: number): void {\n this.getElementById('lg-counter-current').html(index + 1 + '');\n }\n\n updateCounterTotal(): void {\n this.getElementById('lg-counter-all').html(\n this.galleryItems.length + '',\n );\n }\n\n getSlideType(item: GalleryItem): 'video' | 'iframe' | 'image' {\n if (item.__slideVideoInfo) {\n return 'video';\n } else if (item.iframe) {\n return 'iframe';\n } else {\n return 'image';\n }\n }\n\n touchMove(startCoords: Coords, endCoords: Coords, e?: TouchEvent): void {\n const distanceX = endCoords.pageX - startCoords.pageX;\n const distanceY = endCoords.pageY - startCoords.pageY;\n let allowSwipe = false;\n\n if (this.swipeDirection) {\n allowSwipe = true;\n } else {\n if (Math.abs(distanceX) > 15) {\n this.swipeDirection = 'horizontal';\n allowSwipe = true;\n } else if (Math.abs(distanceY) > 15) {\n this.swipeDirection = 'vertical';\n allowSwipe = true;\n }\n }\n\n if (!allowSwipe) {\n return;\n }\n\n const $currentSlide = this.getSlideItem(this.index);\n\n if (this.swipeDirection === 'horizontal') {\n e?.preventDefault();\n // reset opacity and transition duration\n this.outer.addClass('lg-dragging');\n\n // move current slide\n this.setTranslate($currentSlide, distanceX, 0);\n\n // move next and prev slide with current slide\n const width = $currentSlide.get().offsetWidth;\n const slideWidthAmount = (width * 15) / 100;\n const gutter = slideWidthAmount - Math.abs((distanceX * 10) / 100);\n this.setTranslate(\n this.outer.find('.lg-prev-slide').first(),\n -width + distanceX - gutter,\n 0,\n );\n\n this.setTranslate(\n this.outer.find('.lg-next-slide').first(),\n width + distanceX + gutter,\n 0,\n );\n } else if (this.swipeDirection === 'vertical') {\n if (this.settings.swipeToClose) {\n e?.preventDefault();\n this.$container.addClass('lg-dragging-vertical');\n\n const opacity = 1 - Math.abs(distanceY) / window.innerHeight;\n this.$backdrop.css('opacity', opacity);\n\n const scale = 1 - Math.abs(distanceY) / (window.innerWidth * 2);\n this.setTranslate($currentSlide, 0, distanceY, scale, scale);\n if (Math.abs(distanceY) > 100) {\n this.outer\n .addClass('lg-hide-items')\n .removeClass('lg-components-open');\n }\n }\n }\n }\n\n touchEnd(endCoords: Coords, startCoords: Coords, event: TouchEvent): void {\n let distance;\n\n // keep slide animation for any mode while dragg/swipe\n if (this.settings.mode !== 'lg-slide') {\n this.outer.addClass('lg-slide');\n }\n\n // set transition duration\n setTimeout(() => {\n this.$container.removeClass('lg-dragging-vertical');\n this.outer\n .removeClass('lg-dragging lg-hide-items')\n .addClass('lg-components-open');\n\n let triggerClick = true;\n\n if (this.swipeDirection === 'horizontal') {\n distance = endCoords.pageX - startCoords.pageX;\n const distanceAbs = Math.abs(\n endCoords.pageX - startCoords.pageX,\n );\n if (\n distance < 0 &&\n distanceAbs > this.settings.swipeThreshold\n ) {\n this.goToNextSlide(true);\n triggerClick = false;\n } else if (\n distance > 0 &&\n distanceAbs > this.settings.swipeThreshold\n ) {\n this.goToPrevSlide(true);\n triggerClick = false;\n }\n } else if (this.swipeDirection === 'vertical') {\n distance = Math.abs(endCoords.pageY - startCoords.pageY);\n if (\n this.settings.closable &&\n this.settings.swipeToClose &&\n distance > 100\n ) {\n this.closeGallery();\n return;\n } else {\n this.$backdrop.css('opacity', 1);\n }\n }\n this.outer.find('.lg-item').removeAttr('style');\n\n if (\n triggerClick &&\n Math.abs(endCoords.pageX - startCoords.pageX) < 5\n ) {\n // Trigger click if distance is less than 5 pix\n const target = $LG(event.target);\n if (this.isPosterElement(target)) {\n this.LGel.trigger(lGEvents.posterClick);\n }\n }\n\n this.swipeDirection = undefined;\n });\n\n // remove slide class once drag/swipe is completed if mode is not slide\n setTimeout(() => {\n if (\n !this.outer.hasClass('lg-dragging') &&\n this.settings.mode !== 'lg-slide'\n ) {\n this.outer.removeClass('lg-slide');\n }\n }, this.settings.speed + 100);\n }\n\n enableSwipe(): void {\n let startCoords: Coords = {} as Coords;\n let endCoords: Coords = {} as Coords;\n let isMoved = false;\n let isSwiping = false;\n\n if (this.settings.enableSwipe) {\n this.$inner.on('touchstart.lg', (e) => {\n this.dragOrSwipeEnabled = true;\n const $item = this.getSlideItem(this.index);\n if (\n ($LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target)) &&\n !this.outer.hasClass('lg-zoomed') &&\n !this.lgBusy &&\n e.targetTouches.length === 1\n ) {\n isSwiping = true;\n this.touchAction = 'swipe';\n this.manageSwipeClass();\n startCoords = {\n pageX: e.targetTouches[0].pageX,\n pageY: e.targetTouches[0].pageY,\n };\n }\n });\n\n this.$inner.on('touchmove.lg', (e) => {\n if (\n isSwiping &&\n this.touchAction === 'swipe' &&\n e.targetTouches.length === 1\n ) {\n endCoords = {\n pageX: e.targetTouches[0].pageX,\n pageY: e.targetTouches[0].pageY,\n };\n this.touchMove(startCoords, endCoords, e);\n isMoved = true;\n }\n });\n\n this.$inner.on('touchend.lg', (event: TouchEvent) => {\n if (this.touchAction === 'swipe') {\n if (isMoved) {\n isMoved = false;\n this.touchEnd(endCoords, startCoords, event);\n } else if (isSwiping) {\n const target = $LG(event.target);\n if (this.isPosterElement(target)) {\n this.LGel.trigger(lGEvents.posterClick);\n }\n }\n this.touchAction = undefined;\n isSwiping = false;\n }\n });\n }\n }\n\n enableDrag(): void {\n let startCoords: Coords = {} as Coords;\n let endCoords: Coords = {} as Coords;\n let isDraging = false;\n let isMoved = false;\n if (this.settings.enableDrag) {\n this.outer.on('mousedown.lg', (e) => {\n this.dragOrSwipeEnabled = true;\n const $item = this.getSlideItem(this.index);\n if (\n $LG(e.target).hasClass('lg-item') ||\n $item.get().contains(e.target)\n ) {\n if (!this.outer.hasClass('lg-zoomed') && !this.lgBusy) {\n e.preventDefault();\n if (!this.lgBusy) {\n this.manageSwipeClass();\n startCoords = {\n pageX: e.pageX,\n pageY: e.pageY,\n };\n isDraging = true;\n\n // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723\n this.outer.get().scrollLeft += 1;\n this.outer.get().scrollLeft -= 1;\n\n // *\n\n this.outer\n .removeClass('lg-grab')\n .addClass('lg-grabbing');\n\n this.LGel.trigger(lGEvents.dragStart);\n }\n }\n }\n });\n\n $LG(window).on(`mousemove.lg.global${this.lgId}`, (e) => {\n if (isDraging && this.lgOpened) {\n isMoved = true;\n endCoords = {\n pageX: e.pageX,\n pageY: e.pageY,\n };\n this.touchMove(startCoords, endCoords);\n this.LGel.trigger(lGEvents.dragMove);\n }\n });\n\n $LG(window).on(`mouseup.lg.global${this.lgId}`, (event) => {\n if (!this.lgOpened) {\n return;\n }\n const target = $LG(event.target);\n if (isMoved) {\n isMoved = false;\n this.touchEnd(endCoords, startCoords, event);\n this.LGel.trigger(lGEvents.dragEnd);\n } else if (this.isPosterElement(target)) {\n this.LGel.trigger(lGEvents.posterClick);\n }\n\n // Prevent execution on click\n if (isDraging) {\n isDraging = false;\n this.outer.removeClass('lg-grabbing').addClass('lg-grab');\n }\n });\n }\n }\n\n triggerPosterClick(): void {\n this.$inner.on('click.lg', (event) => {\n if (\n !this.dragOrSwipeEnabled &&\n this.isPosterElement($LG(event.target))\n ) {\n this.LGel.trigger(lGEvents.posterClick);\n }\n });\n }\n\n manageSwipeClass(): void {\n let _touchNext = this.index + 1;\n let _touchPrev = this.index - 1;\n if (this.settings.loop && this.galleryItems.length > 2) {\n if (this.index === 0) {\n _touchPrev = this.galleryItems.length - 1;\n } else if (this.index === this.galleryItems.length - 1) {\n _touchNext = 0;\n }\n }\n\n this.outer.find('.lg-item').removeClass('lg-next-slide lg-prev-slide');\n if (_touchPrev > -1) {\n this.getSlideItem(_touchPrev).addClass('lg-prev-slide');\n }\n\n this.getSlideItem(_touchNext).addClass('lg-next-slide');\n }\n\n /**\n * Go to next slide\n * @param {Boolean} fromTouch - true if slide function called via touch event\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * plugin.goToNextSlide();\n * @see <a href=\"/demos/methods/\">Demo</a>\n */\n goToNextSlide(fromTouch?: boolean): void {\n let _loop = this.settings.loop;\n if (fromTouch && this.galleryItems.length < 3) {\n _loop = false;\n }\n\n if (!this.lgBusy) {\n if (this.index + 1 < this.galleryItems.length) {\n this.index++;\n this.LGel.trigger(lGEvents.beforeNextSlide, {\n index: this.index,\n });\n this.slide(this.index, !!fromTouch, false, 'next');\n } else {\n if (_loop) {\n this.index = 0;\n this.LGel.trigger(lGEvents.beforeNextSlide, {\n index: this.index,\n });\n this.slide(this.index, !!fromTouch, false, 'next');\n } else if (this.settings.slideEndAnimation && !fromTouch) {\n this.outer.addClass('lg-right-end');\n setTimeout(() => {\n this.outer.removeClass('lg-right-end');\n }, 400);\n }\n }\n }\n }\n\n /**\n * Go to previous slides\n * @param {Boolean} fromTouch - true if slide function called via touch event\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery({});\n * plugin.goToPrevSlide();\n * @see <a href=\"/demos/methods/\">Demo</a>\n *\n */\n goToPrevSlide(fromTouch?: boolean): void {\n let _loop = this.settings.loop;\n if (fromTouch && this.galleryItems.length < 3) {\n _loop = false;\n }\n\n if (!this.lgBusy) {\n if (this.index > 0) {\n this.index--;\n this.LGel.trigger(lGEvents.beforePrevSlide, {\n index: this.index,\n fromTouch,\n });\n this.slide(this.index, !!fromTouch, false, 'prev');\n } else {\n if (_loop) {\n this.index = this.galleryItems.length - 1;\n this.LGel.trigger(lGEvents.beforePrevSlide, {\n index: this.index,\n fromTouch,\n });\n this.slide(this.index, !!fromTouch, false, 'prev');\n } else if (this.settings.slideEndAnimation && !fromTouch) {\n this.outer.addClass('lg-left-end');\n setTimeout(() => {\n this.outer.removeClass('lg-left-end');\n }, 400);\n }\n }\n }\n }\n\n keyPress(): void {\n $LG(window).on(`keydown.lg.global${this.lgId}`, (e) => {\n if (\n this.lgOpened &&\n this.settings.escKey === true &&\n e.keyCode === 27\n ) {\n e.preventDefault();\n if (\n this.settings.allowMediaOverlap &&\n this.outer.hasClass('lg-can-toggle') &&\n this.outer.hasClass('lg-components-open')\n ) {\n this.outer.removeClass('lg-components-open');\n } else {\n this.closeGallery();\n }\n }\n if (this.lgOpened && this.galleryItems.length > 1) {\n if (e.keyCode === 37) {\n e.preventDefault();\n this.goToPrevSlide();\n }\n\n if (e.keyCode === 39) {\n e.preventDefault();\n this.goToNextSlide();\n }\n }\n });\n }\n\n arrow(): void {\n this.getElementById('lg-prev').on('click.lg', () => {\n this.goToPrevSlide();\n });\n this.getElementById('lg-next').on('click.lg', () => {\n this.goToNextSlide();\n });\n }\n\n arrowDisable(index: number): void {\n // Disable arrows if settings.hideControlOnEnd is true\n if (!this.settings.loop && this.settings.hideControlOnEnd) {\n const $prev = this.getElementById('lg-prev');\n const $next = this.getElementById('lg-next');\n if (index + 1 === this.galleryItems.length) {\n $next.attr('disabled', 'disabled').addClass('disabled');\n } else {\n $next.removeAttr('disabled').removeClass('disabled');\n }\n\n if (index === 0) {\n $prev.attr('disabled', 'disabled').addClass('disabled');\n } else {\n $prev.removeAttr('disabled').removeClass('disabled');\n }\n }\n }\n\n setTranslate(\n $el: lgQuery,\n xValue: number,\n yValue: number,\n scaleX = 1,\n scaleY = 1,\n ): void {\n $el.css(\n 'transform',\n 'translate3d(' +\n xValue +\n 'px, ' +\n yValue +\n 'px, 0px) scale3d(' +\n scaleX +\n ', ' +\n scaleY +\n ', 1)',\n );\n }\n\n mousewheel(): void {\n let lastCall = 0;\n this.outer.on('wheel.lg', (e) => {\n if (!e.deltaY || this.galleryItems.length < 2) {\n return;\n }\n e.preventDefault();\n const now = new Date().getTime();\n if (now - lastCall < 1000) {\n return;\n }\n lastCall = now;\n if (e.deltaY > 0) {\n this.goToNextSlide();\n } else if (e.deltaY < 0) {\n this.goToPrevSlide();\n }\n });\n }\n\n isSlideElement(target: lgQuery): boolean {\n return (\n target.hasClass('lg-outer') ||\n target.hasClass('lg-item') ||\n target.hasClass('lg-img-wrap')\n );\n }\n\n isPosterElement(target: lgQuery): boolean {\n const playButton = this.getSlideItem(this.index)\n .find('.lg-video-play-button')\n .get();\n return (\n target.hasClass('lg-video-poster') ||\n target.hasClass('lg-video-play-button') ||\n (playButton && playButton.contains(target.get()))\n );\n }\n\n /**\n * Maximize minimize inline gallery.\n * @category lGPublicMethods\n */\n toggleMaximize(): void {\n this.getElementById('lg-maximize').on('click.lg', () => {\n this.$container.toggleClass('lg-inline');\n this.refreshOnResize();\n });\n }\n\n invalidateItems(): void {\n for (let index = 0; index < this.items.length; index++) {\n const element = this.items[index];\n const $element = $LG(element);\n $element.off(`click.lgcustom-item-${$element.attr('data-lg-id')}`);\n }\n }\n\n trapFocus(): void {\n this.$container.get().focus({\n preventScroll: true,\n });\n $LG(window).on(`keydown.lg.global${this.lgId}`, (e) => {\n if (!this.lgOpened) {\n return;\n }\n\n const isTabPressed = e.key === 'Tab' || e.keyCode === 9;\n if (!isTabPressed) {\n return;\n }\n const focusableEls = utils.getFocusableElements(\n this.$container.get(),\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n (lastFocusableEl as HTMLElement).focus();\n e.preventDefault();\n }\n } else {\n if (document.activeElement === lastFocusableEl) {\n (firstFocusableEl as HTMLElement).focus();\n e.preventDefault();\n }\n }\n });\n }\n\n manageCloseGallery(): void {\n if (!this.settings.closable) return;\n let mousedown = false;\n this.getElementById('lg-close').on('click.lg', () => {\n this.closeGallery();\n });\n\n if (this.settings.closeOnTap) {\n // If you drag the slide and release outside gallery gets close on chrome\n // for preventing this check mousedown and mouseup happened on .lg-item or lg-outer\n this.outer.on('mousedown.lg', (e) => {\n const target = $LG(e.target);\n if (this.isSlideElement(target)) {\n mousedown = true;\n } else {\n mousedown = false;\n }\n });\n\n this.outer.on('mousemove.lg', () => {\n mousedown = false;\n });\n\n this.outer.on('mouseup.lg', (e) => {\n const target = $LG(e.target);\n if (this.isSlideElement(target) && mousedown) {\n if (!this.outer.hasClass('lg-dragging')) {\n this.closeGallery();\n }\n }\n });\n }\n }\n\n /**\n * Close lightGallery if it is opened.\n *\n * @description If closable is false in the settings, you need to pass true via closeGallery method to force close gallery\n * @return returns the estimated time to close gallery completely including the close animation duration\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * plugin.closeGallery();\n *\n */\n closeGallery(force?: boolean): number {\n if (!this.lgOpened || (!this.settings.closable && !force)) {\n return 0;\n }\n this.LGel.trigger(lGEvents.beforeClose);\n\n if (this.settings.resetScrollPosition && !this.settings.hideScrollbar) {\n $LG(window).scrollTop(this.prevScrollTop);\n }\n\n const currentItem = this.items[this.index];\n let transform: string | undefined;\n if (this.zoomFromOrigin && currentItem) {\n const { top, bottom } = this.mediaContainerPosition;\n const { __slideVideoInfo, poster } = this.galleryItems[this.index];\n const imageSize = utils.getSize(\n currentItem,\n this.outer,\n top + bottom,\n __slideVideoInfo && poster && this.settings.videoMaxSize,\n );\n transform = utils.getTransform(\n currentItem,\n this.outer,\n top,\n bottom,\n imageSize,\n );\n }\n if (this.zoomFromOrigin && transform) {\n this.outer.addClass('lg-closing lg-zoom-from-image');\n this.getSlideItem(this.index)\n .addClass('lg-start-end-progress')\n .css(\n 'transition-duration',\n this.settings.startAnimationDuration + 'ms',\n )\n .css('transform', transform);\n } else {\n this.outer.addClass('lg-hide-items');\n // lg-zoom-from-image is used for setting the opacity to 1 if zoomFromOrigin is true\n // If the closing item doesn't have the lg-size attribute, remove this class to avoid the closing css conflicts\n this.outer.removeClass('lg-zoom-from-image');\n }\n\n // Unbind all events added by lightGallery\n // @todo\n //this.$el.off('.lg.tm');\n\n this.destroyModules();\n\n this.lGalleryOn = false;\n this.isDummyImageRemoved = false;\n this.zoomFromOrigin = this.settings.zoomFromOrigin;\n\n clearTimeout(this.hideBarTimeout);\n this.hideBarTimeout = false;\n $LG('html').removeClass('lg-on');\n\n this.outer.removeClass('lg-visible lg-components-open');\n\n // Resetting opacity to 0 isd required as vertical swipe to close function adds inline opacity.\n this.$backdrop.removeClass('in').css('opacity', 0);\n\n const removeTimeout =\n this.zoomFromOrigin && transform\n ? Math.max(\n this.settings.startAnimationDuration,\n this.settings.backdropDuration,\n )\n : this.settings.backdropDuration;\n this.$container.removeClass('lg-show-in');\n\n // Once the closign animation is completed and gallery is invisible\n setTimeout(() => {\n if (this.zoomFromOrigin && transform) {\n this.outer.removeClass('lg-zoom-from-image');\n }\n this.$container.removeClass('lg-show');\n\n // Reset scrollbar\n this.resetScrollBar();\n\n // Need to remove inline opacity as it is used in the stylesheet as well\n this.$backdrop\n .removeAttr('style')\n .css(\n 'transition-duration',\n this.settings.backdropDuration + 'ms',\n );\n\n this.outer.removeClass(`lg-closing ${this.settings.startClass}`);\n\n this.getSlideItem(this.index).removeClass('lg-start-end-progress');\n this.$inner.empty();\n if (this.lgOpened) {\n this.LGel.trigger(lGEvents.afterClose, {\n instance: this,\n });\n }\n if (this.$container.get()) {\n this.$container.get().blur();\n }\n\n this.lgOpened = false;\n }, removeTimeout + 100);\n return removeTimeout + 100;\n }\n\n initModules(): void {\n this.plugins.forEach((module) => {\n try {\n module.init();\n } catch (err) {\n console.warn(\n `lightGallery:- make sure lightGallery module is properly initiated`,\n );\n }\n });\n }\n\n destroyModules(destroy?: true): void {\n this.plugins.forEach((module) => {\n try {\n if (destroy) {\n module.destroy();\n } else {\n module.closeGallery && module.closeGallery();\n }\n } catch (err) {\n console.warn(\n `lightGallery:- make sure lightGallery module is properly destroyed`,\n );\n }\n });\n }\n\n /**\n * Refresh lightGallery with new set of children.\n *\n * @description This is useful to update the gallery when the child elements are changed without calling destroy method.\n *\n * If you are using dynamic mode, you can pass the modified array of dynamicEl as the first parameter to refresh the dynamic gallery\n * @see <a href=\"/demos/dynamic-mode/\">Demo</a>\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * // Delete or add children, then call\n * plugin.refresh();\n *\n */\n refresh(galleryItems?: GalleryItem[]): void {\n if (!this.settings.dynamic) {\n this.invalidateItems();\n }\n if (galleryItems) {\n this.galleryItems = galleryItems;\n } else {\n this.galleryItems = this.getItems();\n }\n this.updateControls();\n this.openGalleryOnItemClick();\n this.LGel.trigger(lGEvents.updateSlides);\n }\n\n updateControls(): void {\n this.addSlideVideoInfo(this.galleryItems);\n this.updateCounterTotal();\n this.manageSingleSlideClassName();\n }\n\n /**\n * Destroy lightGallery.\n * Destroy lightGallery and its plugin instances completely\n *\n * @description This method also calls CloseGallery function internally. Returns the time takes to completely close and destroy the instance.\n * In case if you want to re-initialize lightGallery right after destroying it, initialize it only once the destroy process is completed.\n * You can use refresh method most of the times.\n * @category lGPublicMethods\n * @example\n * const plugin = lightGallery();\n * plugin.destroy();\n *\n */\n destroy(): number {\n const closeTimeout = this.closeGallery(true);\n setTimeout(() => {\n this.destroyModules(true);\n if (!this.settings.dynamic) {\n this.invalidateItems();\n }\n $LG(window).off(`.lg.global${this.lgId}`);\n this.LGel.off('.lg');\n this.$container.remove();\n }, closeTimeout);\n return closeTimeout;\n }\n}\n","import { LightGallerySettings } from './lg-settings';\nimport { LightGallery } from './lightgallery';\n\nfunction lightGallery(\n el: HTMLElement,\n options?: LightGallerySettings,\n): LightGallery {\n return new LightGallery(el, options);\n}\nexport default lightGallery;\n"],"names":[],"mappings":"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"}
\No newline at end of file