{"version":3,"file":"lg-video.umd.js","sources":["../../../src/plugins/video/lg-video-settings.ts","../../../src/lg-events.ts","../../../src/plugins/video/lg-video.ts"],"sourcesContent":["export interface VideoSettings {\n /**\n * Enable/DIsable first video autoplay.\n * @description Autoplay has to be managed using this setting.\n * Autoplay in PlayerParams doesn't have any effect.\n */\n autoplayFirstVideo: boolean;\n\n /**\n * Change YouTube player parameters.\n * You can find the list of YouTube player parameters from the following link\n * YouTube player parameters\n * @example\n * lightGallery(document.getElementById('lightGallery'), {\n * youTubePlayerParams: {\n * modestbranding : 1,\n * showinfo : 0,\n * controls : 0\n * }\n * })\n */\n youTubePlayerParams: any;\n\n /**\n * Change Vimeo player parameters.\n * You can find the list of vimeo player parameters from the following link\n * Vimeo player parameters\n * @example\n * lightGallery(document.getElementById('lightGallery'), {\n * vimeoPlayerParams: {\n * byline : 0,\n * portrait : 0,\n * color : 'CCCCCC'\n * }\n * })\n */\n vimeoPlayerParams: any;\n\n /**\n * Change Wistia player parameters.\n * You can find the list of Wistia player parameters from the following link\n * Vimeo player parameters\n */\n wistiaPlayerParams: any;\n\n /**\n * Go to next slide when video is ended\n * Note - this doesn't work with YouTube videos at the moment\n */\n gotoNextSlideOnVideoEnd: boolean;\n\n /**\n * Autoplay video on slide change\n * @description Make sure you set preload:\"none\"\n */\n autoplayVideoOnSlide: boolean;\n\n /**\n * Enbale videojs custom video player\n *
\n * Dependency - You need to include videoJs
on your document to enable videojs player\n * \n */\n videojs: boolean;\n\n /**\n * Videojs player options\n */\n videojsOptions: any;\n}\nexport const videoSettings: VideoSettings = {\n autoplayFirstVideo: true,\n youTubePlayerParams: false,\n vimeoPlayerParams: false,\n wistiaPlayerParams: false,\n gotoNextSlideOnVideoEnd: true,\n autoplayVideoOnSlide: false,\n videojs: false,\n videojsOptions: {},\n};\n","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};\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 Methods\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 * First time when an item is loaded lightGallery adds some delay for showing the completed item\n * to show transition effect on item load\n * Respect the delay when you use this event\n */\n delay: number;\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 sub-html content (ex : title/ description) has been appended into the slide.\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 *

\n HTML5 video source = source: {\n src: string;\n type: string;\n }[];\n attributes: HTMLVideoElement;\n *

\n */\n html5Video: VideoSource;\n /**\n * True if video has poster\n */\n hasPoster: boolean;\n\n /**\n * True for first slide\n */\n isFirstSlide: boolean;\n}\n","/**\n * Video module for lightGallery\n * Supports HTML5, YouTube, Vimeo, wistia videos\n *\n *\n * @ref Wistia\n * https://wistia.com/support/integrations/wordpress(How to get url)\n * https://wistia.com/support/developers/embed-options#using-embed-options\n * https://wistia.com/support/developers/player-api\n * https://wistia.com/support/developers/construct-an-embed-code\n * http://jsfiddle.net/xvnm7xLm/\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video\n * https://wistia.com/support/embed-and-share/sharing-videos\n * https://private-sharing.wistia.com/medias/mwhrulrucj\n *\n * @ref Youtube\n * https://developers.google.com/youtube/player_parameters#enablejsapi\n * https://developers.google.com/youtube/iframe_api_reference\n *\n */\n\nimport { VideoSettings, videoSettings } from './lg-video-settings';\nimport { LightGallery } from '../../lightgallery';\nimport { lgQuery } from '../../lgQuery';\nimport { CustomEventHasVideo } from '../../types';\nimport { lGEvents } from '../../lg-events';\nimport { VideoSource } from './types';\n\ndeclare let Vimeo: any;\ndeclare let videojs: any;\ndeclare global {\n interface Window {\n _wq: any;\n Vimeo: any;\n }\n}\n\nfunction param(obj: { [x: string]: string | number | boolean }): string {\n return Object.keys(obj)\n .map(function (k) {\n return encodeURIComponent(k) + '=' + encodeURIComponent(obj[k]);\n })\n .join('&');\n}\n\nexport default class Video {\n private core: LightGallery;\n private settings: VideoSettings;\n constructor(instance: LightGallery) {\n // get lightGallery core plugin instance\n this.core = instance;\n this.settings = { ...videoSettings, ...this.core.settings };\n\n return this;\n }\n init() {\n /**\n * Event triggered when video url found without poster\n * Append video HTML\n * Play if autoplayFirstVideo is true\n */\n this.core.LGel.on(\n `${lGEvents.hasVideo}.video`,\n this.onHasVideo.bind(this),\n );\n\n if (this.core.settings.enableSwipe || this.core.settings.enableDrag) {\n this.core.LGel.on(`${lGEvents.posterClick}.video`, () => {\n const $el = this.core.getSlideItem(this.core.index);\n this.loadVideoOnPosterClick($el);\n });\n } else {\n // For IE 9 and bellow\n this.core.outer\n .find('.lg-item')\n .first()\n .on('click.lg', () => {\n const $el = this.core.getSlideItem(this.core.index);\n this.loadVideoOnPosterClick($el);\n });\n }\n\n // @desc fired immediately before each slide transition.\n this.core.LGel.on(\n `${lGEvents.beforeSlide}.video`,\n this.onBeforeSlide.bind(this),\n );\n\n // @desc fired immediately after each slide transition.\n this.core.LGel.on(\n `${lGEvents.afterSlide}.video`,\n this.onAfterSlide.bind(this),\n );\n }\n\n /**\n * @desc Event triggered when video url or poster found\n * Append video HTML is poster is not given\n * Play if autoplayFirstVideo is true\n *\n * @param {Event} event - Javascript Event object.\n */\n onHasVideo(event: CustomEventHasVideo): void {\n const {\n index,\n src,\n html5Video,\n hasPoster,\n isFirstSlide,\n } = event.detail;\n if (!hasPoster) {\n // All functions are called separately if poster exist in loadVideoOnPosterClick function\n\n this.appendVideos(this.core.getSlideItem(index), {\n src,\n addClass: 'lg-object',\n index,\n html5Video,\n });\n\n // Automatically navigate to next slide once video reaches the end.\n this.gotoNextSlideOnVideoEnd(src, index);\n }\n\n if (this.settings.autoplayFirstVideo && isFirstSlide) {\n if (hasPoster) {\n const $slide = this.core.getSlideItem(index);\n this.loadVideoOnPosterClick($slide);\n } else {\n this.playVideo(index);\n }\n }\n }\n\n /**\n * @desc fired immediately before each slide transition.\n * Pause the previous video\n * Hide the download button if the slide contains YouTube, Vimeo, or Wistia videos.\n *\n * @param {Event} event - Javascript Event object.\n * @param {number} prevIndex - Previous index of the slide.\n * @param {number} index - Current index of the slide\n */\n onBeforeSlide(event: CustomEvent) {\n const { prevIndex, index } = event.detail;\n this.pauseVideo(prevIndex);\n\n const _videoInfo = this.core.galleryItems[index].__slideVideoInfo || {};\n if (_videoInfo.youtube || _videoInfo.vimeo || _videoInfo.wistia) {\n this.core.outer.addClass('lg-hide-download');\n }\n }\n\n /**\n * @desc fired immediately after each slide transition.\n * Play video if autoplayVideoOnSlide option is enabled.\n *\n * @param {Event} event - Javascript Event object.\n * @param {number} prevIndex - Previous index of the slide.\n * @param {number} index - Current index of the slide\n */\n onAfterSlide(event: CustomEvent): void {\n const { index } = event.detail;\n if (this.settings.autoplayVideoOnSlide && this.core.lGalleryOn) {\n setTimeout(() => {\n const $slide = this.core.getSlideItem(index);\n if (!$slide.hasClass('lg-video-loaded')) {\n this.loadVideoOnPosterClick($slide);\n } else {\n this.playVideo(index);\n }\n }, 100);\n }\n }\n\n /**\n * Play HTML5, Youtube, Vimeo or Wistia videos in a particular slide.\n * @param {number} index - Index of the slide\n */\n playVideo(index: number) {\n this.controlVideo(index, 'play');\n }\n\n /**\n * Pause HTML5, Youtube, Vimeo or Wistia videos in a particular slide.\n * @param {number} index - Index of the slide\n */\n pauseVideo(index: number) {\n this.controlVideo(index, 'pause');\n }\n\n getVideoHtml(\n src: any,\n addClass: any,\n index: number,\n html5Video: VideoSource,\n ): string {\n let video = '';\n const videoInfo =\n this.core.galleryItems[(index as unknown) as number]\n .__slideVideoInfo || {};\n const currentGalleryItem = this.core.galleryItems[index];\n let videoTitle = currentGalleryItem.title || currentGalleryItem.alt;\n videoTitle = videoTitle ? 'title=\"' + videoTitle + '\"' : '';\n const commonIframeProps = `allowtransparency=\"true\" \n frameborder=\"0\" \n scrolling=\"no\" \n allowfullscreen \n mozallowfullscreen \n webkitallowfullscreen \n oallowfullscreen \n msallowfullscreen`;\n\n if (videoInfo.youtube) {\n const videoId = 'lg-youtube' + index;\n\n const youTubePlayerParams = `?wmode=opaque&autoplay=0&enablejsapi=1`;\n\n const playerParams =\n youTubePlayerParams +\n (this.settings.youTubePlayerParams\n ? '&' + param(this.settings.youTubePlayerParams)\n : '');\n\n video = ``;\n } else if (videoInfo.vimeo) {\n const videoId = 'lg-vimeo' + index;\n const playerParams = param(this.settings.vimeoPlayerParams);\n\n video = ``;\n } else if (videoInfo.wistia) {\n const wistiaId = 'lg-wistia' + index;\n const playerParams = param(this.settings.wistiaPlayerParams);\n video = ``;\n } else if (videoInfo.html5) {\n let html5VideoMarkup = '';\n for (let i = 0; i < html5Video.source.length; i++) {\n html5VideoMarkup += ``;\n }\n\n let html5VideoAttrs = '';\n const videoAttributes = html5Video.attributes || {};\n Object.keys(videoAttributes || {}).forEach(function (key) {\n html5VideoAttrs += `${key}=\"${(videoAttributes as any)[key]}\" `;\n });\n video = ``;\n }\n\n return video;\n }\n\n /**\n * @desc - Append videos to the slide\n *\n * @param {HTMLElement} el - slide element\n * @param {Object} videoParams - Video parameters, Contains src, class, index, htmlVideo\n */\n appendVideos(\n el: lgQuery,\n videoParams: {\n src: string;\n addClass: string;\n index: number;\n html5Video: any;\n },\n ): any {\n const videoHtml = this.getVideoHtml(\n videoParams.src,\n videoParams.addClass,\n videoParams.index,\n videoParams.html5Video,\n );\n el.find('.lg-video-cont').append(videoHtml);\n const $videoElement = el.find('.lg-video-object').first();\n if (\n this.settings.videojs &&\n this.core.galleryItems[videoParams.index].__slideVideoInfo?.html5\n ) {\n try {\n return videojs(\n $videoElement.get(),\n this.settings.videojsOptions,\n );\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included videojs',\n );\n }\n }\n }\n\n gotoNextSlideOnVideoEnd(src: any, index: number) {\n const $videoElement = this.core\n .getSlideItem(index)\n .find('.lg-video-object')\n .first();\n const videoInfo = this.core.galleryItems[index].__slideVideoInfo || {};\n if (this.settings.gotoNextSlideOnVideoEnd) {\n if (videoInfo.html5) {\n $videoElement.on('ended', () => {\n this.core.goToNextSlide();\n });\n } else if (videoInfo.vimeo) {\n try {\n // https://github.com/vimeo/player.js/#ended\n new Vimeo.Player($videoElement.get()).on('ended', () => {\n this.core.goToNextSlide();\n });\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included //github.com/vimeo/player.js',\n );\n }\n } else if (videoInfo.wistia) {\n try {\n window._wq = window._wq || [];\n\n // @todo Event is gettign triggered multiple times\n window._wq.push({\n id: $videoElement.attr('id'),\n onReady: (video: {\n bind: (arg0: string, arg1: () => void) => void;\n }) => {\n video.bind('end', () => {\n this.core.goToNextSlide();\n });\n },\n });\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included //fast.wistia.com/assets/external/E-v1.js',\n );\n }\n }\n }\n }\n\n controlVideo(index: number, action: string) {\n const $videoElement = this.core\n .getSlideItem(index)\n .find('.lg-video-object')\n .first();\n const videoInfo = this.core.galleryItems[index].__slideVideoInfo || {};\n\n if (!$videoElement.get()) return;\n\n if (videoInfo.youtube) {\n try {\n ($videoElement.get() as any).contentWindow.postMessage(\n `{\"event\":\"command\",\"func\":\"${action}Video\",\"args\":\"\"}`,\n '*',\n );\n } catch (e) {\n console.error(`lightGallery:- ${e}`);\n }\n } else if (videoInfo.vimeo) {\n try {\n new Vimeo.Player($videoElement.get())[action]();\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included //github.com/vimeo/player.js',\n );\n }\n } else if (videoInfo.html5) {\n if (this.settings.videojs) {\n try {\n (videojs($videoElement.get()) as any)[action as any]();\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included videojs',\n );\n }\n } else {\n ($videoElement.get() as any)[action]();\n }\n } else if (videoInfo.wistia) {\n try {\n window._wq = window._wq || [];\n\n // @todo Find a way to destroy wistia player instance\n window._wq.push({\n id: $videoElement.attr('id'),\n onReady: (video: any) => {\n video[action]();\n },\n });\n } catch (e) {\n console.error(\n 'lightGallery:- Make sure you have included //fast.wistia.com/assets/external/E-v1.js',\n );\n }\n }\n }\n\n loadVideoOnPosterClick($el: lgQuery) {\n // check slide has poster\n if (!$el.hasClass('lg-video-loaded')) {\n // check already video element present\n if (!$el.hasClass('lg-has-video')) {\n $el.addClass('lg-has-video');\n\n let _html;\n\n const _src = this.core.galleryItems[this.core.index].src;\n const video = this.core.galleryItems[this.core.index].video;\n if (video) {\n _html =\n typeof video === 'string' ? JSON.parse(video) : video;\n }\n\n const videoJsPlayer = this.appendVideos($el, {\n src: _src,\n addClass: '',\n index: this.core.index,\n html5Video: _html,\n });\n\n this.gotoNextSlideOnVideoEnd(_src, this.core.index);\n\n const $tempImg = $el.find('.lg-object').first().get();\n\n // @todo make sure it is working\n $el.find('.lg-video-cont').first().append($tempImg);\n $el.addClass('lg-video-loading');\n\n videoJsPlayer &&\n videoJsPlayer.ready(() => {\n videoJsPlayer.on('loadedmetadata', () => {\n this.onVideoLoadAfterPosterClick(\n $el,\n this.core.index,\n );\n });\n });\n\n $el.find('.lg-video-object')\n .first()\n .on('load.lg error.lg loadeddata.lg', () => {\n setTimeout(() => {\n this.onVideoLoadAfterPosterClick(\n $el,\n this.core.index,\n );\n }, 50);\n });\n } else {\n this.playVideo(this.core.index);\n }\n }\n }\n onVideoLoadAfterPosterClick($el: lgQuery, index: number): void {\n $el.addClass('lg-video-loaded');\n this.playVideo(index);\n }\n destroy(): void {\n this.core.LGel.off('.lg.video');\n this.core.LGel.off('.video');\n }\n}\n"],"names":[],"mappings":"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"}