lightgallery 2.3.0-beta → 2.3.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/css/lightgallery-bundle.css +19 -26
  2. package/css/lightgallery-bundle.min.css +1 -1
  3. package/css/lightgallery-core.css +0 -19
  4. package/css/lightgallery.css +19 -26
  5. package/lg-events.d.ts +0 -4
  6. package/lg-settings.d.ts +4 -7
  7. package/lg-utils.d.ts +10 -1
  8. package/lib/lg-settings.js +1 -2
  9. package/lib/lg-settings.js.map +1 -1
  10. package/lib/lg-utils.js +43 -3
  11. package/lib/lg-utils.js.map +1 -1
  12. package/lib/lgQuery.js +31 -20
  13. package/lib/lgQuery.js.map +1 -1
  14. package/lib/lightgallery.js +100 -118
  15. package/lib/lightgallery.js.map +1 -1
  16. package/lib/plugins/video/lg-video-settings.js.map +1 -1
  17. package/lib/plugins/video/lg-video-utils.js +24 -0
  18. package/lib/plugins/video/lg-video-utils.js.map +1 -0
  19. package/lib/plugins/video/lg-video.js +38 -30
  20. package/lib/plugins/video/lg-video.js.map +1 -1
  21. package/lib/plugins/zoom/lg-zoom.js +7 -8
  22. package/lib/plugins/zoom/lg-zoom.js.map +1 -1
  23. package/lightgallery.d.ts +18 -10
  24. package/lightgallery.es5.js +176 -144
  25. package/lightgallery.es5.js.map +1 -1
  26. package/lightgallery.min.js +2 -2
  27. package/lightgallery.umd.js +176 -144
  28. package/lightgallery.umd.js.map +1 -1
  29. package/lit/lightgallery.esm.js +7 -7
  30. package/lit/lightgallery.umd.js +3 -3
  31. package/package.json +1 -1
  32. package/plugins/autoplay/lg-autoplay.es5.js +1 -1
  33. package/plugins/autoplay/lg-autoplay.es5.js.map +1 -1
  34. package/plugins/autoplay/lg-autoplay.min.js +1 -1
  35. package/plugins/autoplay/lg-autoplay.umd.js +1 -1
  36. package/plugins/autoplay/lg-autoplay.umd.js.map +1 -1
  37. package/plugins/comment/lg-comment.es5.js +1 -1
  38. package/plugins/comment/lg-comment.es5.js.map +1 -1
  39. package/plugins/comment/lg-comment.min.js +1 -1
  40. package/plugins/comment/lg-comment.umd.js +1 -1
  41. package/plugins/comment/lg-comment.umd.js.map +1 -1
  42. package/plugins/fullscreen/lg-fullscreen.es5.js +1 -1
  43. package/plugins/fullscreen/lg-fullscreen.min.js +1 -1
  44. package/plugins/fullscreen/lg-fullscreen.umd.js +1 -1
  45. package/plugins/hash/lg-hash.es5.js +1 -1
  46. package/plugins/hash/lg-hash.es5.js.map +1 -1
  47. package/plugins/hash/lg-hash.min.js +1 -1
  48. package/plugins/hash/lg-hash.umd.js +1 -1
  49. package/plugins/hash/lg-hash.umd.js.map +1 -1
  50. package/plugins/mediumZoom/lg-medium-zoom.es5.js +1 -1
  51. package/plugins/mediumZoom/lg-medium-zoom.es5.js.map +1 -1
  52. package/plugins/mediumZoom/lg-medium-zoom.min.js +1 -1
  53. package/plugins/mediumZoom/lg-medium-zoom.umd.js +1 -1
  54. package/plugins/mediumZoom/lg-medium-zoom.umd.js.map +1 -1
  55. package/plugins/pager/lg-pager.es5.js +1 -1
  56. package/plugins/pager/lg-pager.es5.js.map +1 -1
  57. package/plugins/pager/lg-pager.min.js +1 -1
  58. package/plugins/pager/lg-pager.umd.js +1 -1
  59. package/plugins/pager/lg-pager.umd.js.map +1 -1
  60. package/plugins/relativeCaption/lg-relative-caption.es5.js +1 -1
  61. package/plugins/relativeCaption/lg-relative-caption.es5.js.map +1 -1
  62. package/plugins/relativeCaption/lg-relative-caption.min.js +1 -1
  63. package/plugins/relativeCaption/lg-relative-caption.umd.js +1 -1
  64. package/plugins/relativeCaption/lg-relative-caption.umd.js.map +1 -1
  65. package/plugins/rotate/lg-rotate.es5.js +1 -1
  66. package/plugins/rotate/lg-rotate.es5.js.map +1 -1
  67. package/plugins/rotate/lg-rotate.min.js +1 -1
  68. package/plugins/rotate/lg-rotate.umd.js +1 -1
  69. package/plugins/rotate/lg-rotate.umd.js.map +1 -1
  70. package/plugins/share/lg-share.es5.js +1 -1
  71. package/plugins/share/lg-share.es5.js.map +1 -1
  72. package/plugins/share/lg-share.min.js +1 -1
  73. package/plugins/share/lg-share.umd.js +1 -1
  74. package/plugins/share/lg-share.umd.js.map +1 -1
  75. package/plugins/thumbnail/lg-thumbnail.es5.js +1 -1
  76. package/plugins/thumbnail/lg-thumbnail.es5.js.map +1 -1
  77. package/plugins/thumbnail/lg-thumbnail.min.js +1 -1
  78. package/plugins/thumbnail/lg-thumbnail.umd.js +1 -1
  79. package/plugins/thumbnail/lg-thumbnail.umd.js.map +1 -1
  80. package/plugins/video/lg-video-settings.d.ts +2 -1
  81. package/plugins/video/lg-video-utils.d.ts +6 -0
  82. package/plugins/video/lg-video.d.ts +6 -1
  83. package/plugins/video/lg-video.es5.js +57 -29
  84. package/plugins/video/lg-video.es5.js.map +1 -1
  85. package/plugins/video/lg-video.min.js +2 -2
  86. package/plugins/video/lg-video.umd.js +57 -29
  87. package/plugins/video/lg-video.umd.js.map +1 -1
  88. package/plugins/zoom/lg-zoom.es5.js +8 -9
  89. package/plugins/zoom/lg-zoom.es5.js.map +1 -1
  90. package/plugins/zoom/lg-zoom.min.js +2 -2
  91. package/plugins/zoom/lg-zoom.umd.js +8 -9
  92. package/plugins/zoom/lg-zoom.umd.js.map +1 -1
  93. package/react/Lightgallery.es5.js +176 -144
  94. package/react/Lightgallery.es5.js.map +1 -1
  95. package/react/Lightgallery.umd.js +176 -144
  96. package/react/Lightgallery.umd.js.map +1 -1
  97. package/scss/_lg-theme-default.scss +17 -10
  98. package/scss/lightgallery-core.scss +0 -24
  99. package/vue/LightGalleryVue.common.js +291 -268
  100. package/vue/LightGalleryVue.common.js.map +1 -1
  101. package/vue/LightGalleryVue.umd.js +291 -268
  102. package/vue/LightGalleryVue.umd.js.map +1 -1
  103. package/vue/LightGalleryVue.umd.min.js +2 -2
  104. package/vue/LightGalleryVue.umd.min.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"lg-thumbnail.umd.js","sources":["../../../src/plugins/thumbnail/lg-thumbnail-settings.ts","../../../src/lg-events.ts","../../../src/plugins/thumbnail/lg-thumbnail.ts"],"sourcesContent":["export interface ThumbnailsSettings {\n /**\n * Enable thumbnails for the gallery\n */\n thumbnail: boolean;\n\n /*\n * Enable thumbnail animation.\n */\n animateThumb: boolean;\n\n /**\n * Position of selected thumbnail.\n */\n currentPagerPosition: 'left' | 'middle' | 'right';\n\n /**\n * Position of thumbnails.\n */\n alignThumbnails: 'left' | 'middle' | 'right';\n\n /**\n * Width of each thumbnails.\n */\n thumbWidth: number;\n\n /**\n * Height of each thumbnails.\n */\n thumbHeight: string;\n\n /**\n * Spacing between each thumbnails\n */\n thumbMargin: number;\n\n /**\n * control where the thumbnails should be appended.\n * By default, thumbnails are appended to '.lg-components' which has inbuilt open close transitions\n * If you don't want initial thumbnails transitions, or want to do more customization,\n * you can append thumbnails to the lightGalley outer div -\n * <a href=\"/demos/thumbnails/#static-thumbnails\">Demo</a>\n */\n appendThumbnailsTo: '.lg-outer' | '.lg-components';\n\n /**\n * Enable toggle captions and thumbnails.\n * @description not applicable if allowMediaOverlap is false\n */\n toggleThumb: boolean;\n\n /**\n * Enables desktop mouse drag support for thumbnails.\n */\n enableThumbDrag: boolean;\n\n /**\n * Enables thumbnail touch/swipe support for touch devices\n */\n enableThumbSwipe: boolean;\n\n /**\n * By setting the thumbnailSwipeThreshold (in px) you can set how far the user must swipe for the next/prev slide.\n */\n thumbnailSwipeThreshold: number;\n\n /**\n * You can automatically load thumbnails for YouTube videos from YouTube by setting loadYouTubeThumbnail true\n */\n loadYouTubeThumbnail: boolean;\n\n /**\n * You can specify the thumbnail size by setting respective number.\n */\n //@todo add demo\n youTubeThumbSize: number;\n}\n\nexport const thumbnailsSettings: ThumbnailsSettings = {\n thumbnail: true,\n\n animateThumb: true,\n currentPagerPosition: 'middle',\n alignThumbnails: 'middle',\n\n thumbWidth: 100,\n thumbHeight: '80px',\n thumbMargin: 5,\n\n appendThumbnailsTo: '.lg-components',\n toggleThumb: false,\n\n enableThumbDrag: true,\n enableThumbSwipe: true,\n thumbnailSwipeThreshold: 10,\n\n loadYouTubeThumbnail: true,\n youTubeThumbSize: 1,\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 rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\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 <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 * True for first slide\n */\n isFirstSlide: boolean;\n}\n","import {\n ThumbnailsSettings,\n thumbnailsSettings,\n} from './lg-thumbnail-settings';\nimport { LgQuery, lgQuery } from '../../lgQuery';\nimport { LightGallery } from '../../lightgallery';\nimport { GalleryItem } from '../../lg-utils';\nimport { lGEvents } from '../../lg-events';\ninterface ThumbDragUtils {\n cords: {\n startX: number;\n endX: number;\n };\n isMoved: boolean;\n newTranslateX: number;\n startTime: Date;\n endTime: Date;\n touchMoveTime: number;\n}\ninterface ThumbnailGalleryItem extends GalleryItem {\n thumb: string;\n}\nexport default class Thumbnail {\n private core: LightGallery;\n private $thumbOuter!: lgQuery;\n private $lgThumb!: lgQuery;\n private thumbOuterWidth = 0;\n private thumbTotalWidth = 0;\n private translateX = 0;\n private thumbClickable = false;\n private settings!: ThumbnailsSettings;\n private $LG!: LgQuery;\n constructor(instance: LightGallery, $LG: LgQuery) {\n // get lightGallery core plugin instance\n this.core = instance;\n this.$LG = $LG;\n\n return this;\n }\n\n init(): void {\n // extend module default settings with lightGallery core settings\n this.settings = {\n ...thumbnailsSettings,\n ...this.core.settings,\n };\n this.thumbOuterWidth = 0;\n this.thumbTotalWidth =\n this.core.galleryItems.length *\n (this.settings.thumbWidth + this.settings.thumbMargin);\n\n // Thumbnail animation value\n this.translateX = 0;\n\n this.setAnimateThumbStyles();\n\n if (!this.core.settings.allowMediaOverlap) {\n this.settings.toggleThumb = false;\n }\n\n if (this.settings.thumbnail) {\n this.build();\n if (this.settings.animateThumb) {\n if (this.settings.enableThumbDrag) {\n this.enableThumbDrag();\n }\n\n if (this.settings.enableThumbSwipe) {\n this.enableThumbSwipe();\n }\n\n this.thumbClickable = false;\n } else {\n this.thumbClickable = true;\n }\n\n this.toggleThumbBar();\n this.thumbKeyPress();\n }\n }\n\n build(): void {\n this.setThumbMarkup();\n this.manageActiveClassOnSlideChange();\n this.$lgThumb.first().on('click.lg touchend.lg', (e: CustomEvent) => {\n const $target = this.$LG(e.target);\n if (!$target.hasAttribute('data-lg-item-id')) {\n return;\n }\n setTimeout(() => {\n // In IE9 and bellow touch does not support\n // Go to slide if browser does not support css transitions\n if (this.thumbClickable && !this.core.lgBusy) {\n const index = parseInt($target.attr('data-lg-item-id'));\n this.core.slide(index, false, true, false);\n }\n }, 50);\n });\n\n this.core.LGel.on(`${lGEvents.beforeSlide}.thumb`, (event) => {\n const { index } = event.detail;\n this.animateThumb(index);\n });\n this.core.LGel.on(`${lGEvents.beforeOpen}.thumb`, () => {\n this.thumbOuterWidth = this.core.outer.get().offsetWidth;\n });\n\n this.core.LGel.on(`${lGEvents.updateSlides}.thumb`, () => {\n this.rebuildThumbnails();\n });\n this.core.LGel.on(`${lGEvents.containerResize}.thumb`, () => {\n if (!this.core.lgOpened) return;\n setTimeout(() => {\n this.thumbOuterWidth = this.core.outer.get().offsetWidth;\n this.animateThumb(this.core.index);\n this.thumbOuterWidth = this.core.outer.get().offsetWidth;\n }, 50);\n });\n }\n\n setThumbMarkup(): void {\n let thumbOuterClassNames = 'lg-thumb-outer ';\n\n if (this.settings.alignThumbnails) {\n thumbOuterClassNames += `lg-thumb-align-${this.settings.alignThumbnails}`;\n }\n\n const html = `<div class=\"${thumbOuterClassNames}\">\n <div class=\"lg-thumb lg-group\">\n </div>\n </div>`;\n\n this.core.outer.addClass('lg-has-thumb');\n\n if (this.settings.appendThumbnailsTo === '.lg-components') {\n this.core.$lgComponents.append(html);\n } else {\n this.core.outer.append(html);\n }\n\n this.$thumbOuter = this.core.outer.find('.lg-thumb-outer').first();\n this.$lgThumb = this.core.outer.find('.lg-thumb').first();\n\n if (this.settings.animateThumb) {\n this.core.outer\n .find('.lg-thumb')\n .css('transition-duration', this.core.settings.speed + 'ms')\n .css('width', this.thumbTotalWidth + 'px')\n .css('position', 'relative');\n }\n\n this.setThumbItemHtml(\n (this.core.galleryItems as unknown) as ThumbnailGalleryItem[],\n );\n }\n\n enableThumbDrag(): void {\n let thumbDragUtils: ThumbDragUtils = {\n cords: {\n startX: 0,\n endX: 0,\n },\n isMoved: false,\n newTranslateX: 0,\n startTime: new Date(),\n endTime: new Date(),\n touchMoveTime: 0,\n };\n\n let isDragging = false;\n\n this.$thumbOuter.addClass('lg-grab');\n\n this.core.outer\n .find('.lg-thumb')\n .first()\n .on('mousedown.lg.thumb', (e) => {\n if (this.thumbTotalWidth > this.thumbOuterWidth) {\n // execute only on .lg-object\n e.preventDefault();\n thumbDragUtils.cords.startX = e.pageX;\n\n thumbDragUtils.startTime = new Date();\n this.thumbClickable = false;\n\n isDragging = true;\n\n // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723\n this.core.outer.get().scrollLeft += 1;\n this.core.outer.get().scrollLeft -= 1;\n\n // *\n this.$thumbOuter\n .removeClass('lg-grab')\n .addClass('lg-grabbing');\n }\n });\n\n this.$LG(window).on(\n `mousemove.lg.thumb.global${this.core.lgId}`,\n (e) => {\n if (!this.core.lgOpened) return;\n if (isDragging) {\n thumbDragUtils.cords.endX = e.pageX;\n\n thumbDragUtils = this.onThumbTouchMove(thumbDragUtils);\n }\n },\n );\n\n this.$LG(window).on(`mouseup.lg.thumb.global${this.core.lgId}`, () => {\n if (!this.core.lgOpened) return;\n if (thumbDragUtils.isMoved) {\n thumbDragUtils = this.onThumbTouchEnd(thumbDragUtils);\n } else {\n this.thumbClickable = true;\n }\n\n if (isDragging) {\n isDragging = false;\n this.$thumbOuter.removeClass('lg-grabbing').addClass('lg-grab');\n }\n });\n }\n\n enableThumbSwipe(): void {\n let thumbDragUtils: ThumbDragUtils = {\n cords: {\n startX: 0,\n endX: 0,\n },\n isMoved: false,\n newTranslateX: 0,\n startTime: new Date(),\n endTime: new Date(),\n touchMoveTime: 0,\n };\n\n this.$lgThumb.on('touchstart.lg', (e: TouchEvent) => {\n if (this.thumbTotalWidth > this.thumbOuterWidth) {\n e.preventDefault();\n thumbDragUtils.cords.startX = e.targetTouches[0].pageX;\n this.thumbClickable = false;\n thumbDragUtils.startTime = new Date();\n }\n });\n\n this.$lgThumb.on('touchmove.lg', (e: TouchEvent) => {\n if (this.thumbTotalWidth > this.thumbOuterWidth) {\n e.preventDefault();\n thumbDragUtils.cords.endX = e.targetTouches[0].pageX;\n thumbDragUtils = this.onThumbTouchMove(thumbDragUtils);\n }\n });\n\n this.$lgThumb.on('touchend.lg', () => {\n if (thumbDragUtils.isMoved) {\n thumbDragUtils = this.onThumbTouchEnd(thumbDragUtils);\n } else {\n this.thumbClickable = true;\n }\n });\n }\n\n // Rebuild thumbnails\n rebuildThumbnails(): void {\n // Remove transitions\n this.$thumbOuter.addClass('lg-rebuilding-thumbnails');\n setTimeout(() => {\n this.thumbTotalWidth =\n this.core.galleryItems.length *\n (this.settings.thumbWidth + this.settings.thumbMargin);\n this.$lgThumb.css('width', this.thumbTotalWidth + 'px');\n this.$lgThumb.empty();\n this.setThumbItemHtml(\n (this.core.galleryItems as unknown) as ThumbnailGalleryItem[],\n );\n this.animateThumb(this.core.index);\n }, 50);\n setTimeout(() => {\n this.$thumbOuter.removeClass('lg-rebuilding-thumbnails');\n }, 200);\n }\n\n // @ts-check\n\n setTranslate(value: number): void {\n this.$lgThumb.css(\n 'transform',\n 'translate3d(-' + value + 'px, 0px, 0px)',\n );\n }\n\n getPossibleTransformX(left: number): number {\n if (left > this.thumbTotalWidth - this.thumbOuterWidth) {\n left = this.thumbTotalWidth - this.thumbOuterWidth;\n }\n\n if (left < 0) {\n left = 0;\n }\n return left;\n }\n\n animateThumb(index: number): void {\n this.$lgThumb.css(\n 'transition-duration',\n this.core.settings.speed + 'ms',\n );\n if (this.settings.animateThumb) {\n let position = 0;\n switch (this.settings.currentPagerPosition) {\n case 'left':\n position = 0;\n break;\n case 'middle':\n position =\n this.thumbOuterWidth / 2 - this.settings.thumbWidth / 2;\n break;\n case 'right':\n position = this.thumbOuterWidth - this.settings.thumbWidth;\n }\n this.translateX =\n (this.settings.thumbWidth + this.settings.thumbMargin) * index -\n 1 -\n position;\n if (this.translateX > this.thumbTotalWidth - this.thumbOuterWidth) {\n this.translateX = this.thumbTotalWidth - this.thumbOuterWidth;\n }\n\n if (this.translateX < 0) {\n this.translateX = 0;\n }\n\n this.setTranslate(this.translateX);\n }\n }\n\n onThumbTouchMove(thumbDragUtils: ThumbDragUtils): ThumbDragUtils {\n thumbDragUtils.newTranslateX = this.translateX;\n thumbDragUtils.isMoved = true;\n\n thumbDragUtils.touchMoveTime = new Date().valueOf();\n\n thumbDragUtils.newTranslateX -=\n thumbDragUtils.cords.endX - thumbDragUtils.cords.startX;\n\n thumbDragUtils.newTranslateX = this.getPossibleTransformX(\n thumbDragUtils.newTranslateX,\n );\n\n // move current slide\n this.setTranslate(thumbDragUtils.newTranslateX);\n this.$thumbOuter.addClass('lg-dragging');\n\n return thumbDragUtils;\n }\n\n onThumbTouchEnd(thumbDragUtils: ThumbDragUtils): ThumbDragUtils {\n thumbDragUtils.isMoved = false;\n thumbDragUtils.endTime = new Date();\n this.$thumbOuter.removeClass('lg-dragging');\n\n const touchDuration =\n thumbDragUtils.endTime.valueOf() -\n thumbDragUtils.startTime.valueOf();\n let distanceXnew =\n thumbDragUtils.cords.endX - thumbDragUtils.cords.startX;\n let speedX = Math.abs(distanceXnew) / touchDuration;\n // Some magical numbers\n // Can be improved\n if (\n speedX > 0.15 &&\n thumbDragUtils.endTime.valueOf() - thumbDragUtils.touchMoveTime < 30\n ) {\n speedX += 1;\n\n if (speedX > 2) {\n speedX += 1;\n }\n speedX =\n speedX +\n speedX * (Math.abs(distanceXnew) / this.thumbOuterWidth);\n this.$lgThumb.css(\n 'transition-duration',\n Math.min(speedX - 1, 2) + 'settings',\n );\n\n distanceXnew = distanceXnew * speedX;\n\n this.translateX = this.getPossibleTransformX(\n this.translateX - distanceXnew,\n );\n this.setTranslate(this.translateX);\n } else {\n this.translateX = thumbDragUtils.newTranslateX;\n }\n if (\n Math.abs(thumbDragUtils.cords.endX - thumbDragUtils.cords.startX) <\n this.settings.thumbnailSwipeThreshold\n ) {\n this.thumbClickable = true;\n }\n\n return thumbDragUtils;\n }\n\n getThumbHtml(thumb: string, index: number): string {\n const slideVideoInfo =\n this.core.galleryItems[index].__slideVideoInfo || {};\n let thumbImg;\n\n if (slideVideoInfo.youtube) {\n if (this.settings.loadYouTubeThumbnail) {\n thumbImg =\n '//img.youtube.com/vi/' +\n slideVideoInfo.youtube[1] +\n '/' +\n this.settings.youTubeThumbSize +\n '.jpg';\n } else {\n thumbImg = thumb;\n }\n } else {\n thumbImg = thumb;\n }\n\n return `<div data-lg-item-id=\"${index}\" class=\"lg-thumb-item ${\n index === this.core.index ? ' active' : ''\n }\" \n style=\"width:${this.settings.thumbWidth}px; height: ${\n this.settings.thumbHeight\n };\n margin-right: ${this.settings.thumbMargin}px;\">\n <img data-lg-item-id=\"${index}\" src=\"${thumbImg}\" />\n </div>`;\n }\n\n getThumbItemHtml(items: ThumbnailGalleryItem[]): string {\n let thumbList = '';\n for (let i = 0; i < items.length; i++) {\n thumbList += this.getThumbHtml(items[i].thumb, i);\n }\n\n return thumbList;\n }\n\n setThumbItemHtml(items: ThumbnailGalleryItem[]): void {\n const thumbList = this.getThumbItemHtml(items);\n this.$lgThumb.html(thumbList);\n }\n\n setAnimateThumbStyles(): void {\n if (this.settings.animateThumb) {\n this.core.outer.addClass('lg-animate-thumb');\n }\n }\n\n // Manage thumbnail active calss\n manageActiveClassOnSlideChange(): void {\n // manage active class for thumbnail\n this.core.LGel.on(\n `${lGEvents.beforeSlide}.thumb`,\n (event: CustomEvent) => {\n const $thumb = this.core.outer.find('.lg-thumb-item');\n const { index } = event.detail;\n $thumb.removeClass('active');\n $thumb.eq(index).addClass('active');\n },\n );\n }\n\n // Toggle thumbnail bar\n toggleThumbBar(): void {\n if (this.settings.toggleThumb) {\n this.core.outer.addClass('lg-can-toggle');\n this.core.$toolbar.append(\n '<button type=\"button\" aria-label=\"Toggle thumbnails\" class=\"lg-toggle-thumb lg-icon\"></button>',\n );\n this.core.outer\n .find('.lg-toggle-thumb')\n .first()\n .on('click.lg', () => {\n this.core.outer.toggleClass('lg-components-open');\n });\n }\n }\n\n thumbKeyPress(): void {\n this.$LG(window).on(`keydown.lg.thumb.global${this.core.lgId}`, (e) => {\n if (!this.core.lgOpened || !this.settings.toggleThumb) return;\n\n if (e.keyCode === 38) {\n e.preventDefault();\n this.core.outer.addClass('lg-components-open');\n } else if (e.keyCode === 40) {\n e.preventDefault();\n this.core.outer.removeClass('lg-components-open');\n }\n });\n }\n\n destroy(): void {\n if (this.settings.thumbnail) {\n this.$LG(window).off(`.lg.thumb.global${this.core.lgId}`);\n this.core.LGel.off('.lg.thumb');\n this.core.LGel.off('.thumb');\n this.$thumbOuter.remove();\n this.core.outer.removeClass('lg-has-thumb');\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lg-thumbnail.umd.js","sources":["../../../src/plugins/thumbnail/lg-thumbnail-settings.ts","../../../src/lg-events.ts","../../../src/plugins/thumbnail/lg-thumbnail.ts"],"sourcesContent":["export interface ThumbnailsSettings {\n /**\n * Enable thumbnails for the gallery\n */\n thumbnail: boolean;\n\n /*\n * Enable thumbnail animation.\n */\n animateThumb: boolean;\n\n /**\n * Position of selected thumbnail.\n */\n currentPagerPosition: 'left' | 'middle' | 'right';\n\n /**\n * Position of thumbnails.\n */\n alignThumbnails: 'left' | 'middle' | 'right';\n\n /**\n * Width of each thumbnails.\n */\n thumbWidth: number;\n\n /**\n * Height of each thumbnails.\n */\n thumbHeight: string;\n\n /**\n * Spacing between each thumbnails\n */\n thumbMargin: number;\n\n /**\n * control where the thumbnails should be appended.\n * By default, thumbnails are appended to '.lg-components' which has inbuilt open close transitions\n * If you don't want initial thumbnails transitions, or want to do more customization,\n * you can append thumbnails to the lightGalley outer div -\n * <a href=\"/demos/thumbnails/#static-thumbnails\">Demo</a>\n */\n appendThumbnailsTo: '.lg-outer' | '.lg-components';\n\n /**\n * Enable toggle captions and thumbnails.\n * @description not applicable if allowMediaOverlap is false\n */\n toggleThumb: boolean;\n\n /**\n * Enables desktop mouse drag support for thumbnails.\n */\n enableThumbDrag: boolean;\n\n /**\n * Enables thumbnail touch/swipe support for touch devices\n */\n enableThumbSwipe: boolean;\n\n /**\n * By setting the thumbnailSwipeThreshold (in px) you can set how far the user must swipe for the next/prev slide.\n */\n thumbnailSwipeThreshold: number;\n\n /**\n * You can automatically load thumbnails for YouTube videos from YouTube by setting loadYouTubeThumbnail true\n */\n loadYouTubeThumbnail: boolean;\n\n /**\n * You can specify the thumbnail size by setting respective number.\n */\n //@todo add demo\n youTubeThumbSize: number;\n}\n\nexport const thumbnailsSettings: ThumbnailsSettings = {\n thumbnail: true,\n\n animateThumb: true,\n currentPagerPosition: 'middle',\n alignThumbnails: 'middle',\n\n thumbWidth: 100,\n thumbHeight: '80px',\n thumbMargin: 5,\n\n appendThumbnailsTo: '.lg-components',\n toggleThumb: false,\n\n enableThumbDrag: true,\n enableThumbSwipe: true,\n thumbnailSwipeThreshold: 10,\n\n loadYouTubeThumbnail: true,\n youTubeThumbSize: 1,\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 rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\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 <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","import {\n ThumbnailsSettings,\n thumbnailsSettings,\n} from './lg-thumbnail-settings';\nimport { LgQuery, lgQuery } from '../../lgQuery';\nimport { LightGallery } from '../../lightgallery';\nimport { GalleryItem } from '../../lg-utils';\nimport { lGEvents } from '../../lg-events';\ninterface ThumbDragUtils {\n cords: {\n startX: number;\n endX: number;\n };\n isMoved: boolean;\n newTranslateX: number;\n startTime: Date;\n endTime: Date;\n touchMoveTime: number;\n}\ninterface ThumbnailGalleryItem extends GalleryItem {\n thumb: string;\n}\nexport default class Thumbnail {\n private core: LightGallery;\n private $thumbOuter!: lgQuery;\n private $lgThumb!: lgQuery;\n private thumbOuterWidth = 0;\n private thumbTotalWidth = 0;\n private translateX = 0;\n private thumbClickable = false;\n private settings!: ThumbnailsSettings;\n private $LG!: LgQuery;\n constructor(instance: LightGallery, $LG: LgQuery) {\n // get lightGallery core plugin instance\n this.core = instance;\n this.$LG = $LG;\n\n return this;\n }\n\n init(): void {\n // extend module default settings with lightGallery core settings\n this.settings = {\n ...thumbnailsSettings,\n ...this.core.settings,\n };\n this.thumbOuterWidth = 0;\n this.thumbTotalWidth =\n this.core.galleryItems.length *\n (this.settings.thumbWidth + this.settings.thumbMargin);\n\n // Thumbnail animation value\n this.translateX = 0;\n\n this.setAnimateThumbStyles();\n\n if (!this.core.settings.allowMediaOverlap) {\n this.settings.toggleThumb = false;\n }\n\n if (this.settings.thumbnail) {\n this.build();\n if (this.settings.animateThumb) {\n if (this.settings.enableThumbDrag) {\n this.enableThumbDrag();\n }\n\n if (this.settings.enableThumbSwipe) {\n this.enableThumbSwipe();\n }\n\n this.thumbClickable = false;\n } else {\n this.thumbClickable = true;\n }\n\n this.toggleThumbBar();\n this.thumbKeyPress();\n }\n }\n\n build(): void {\n this.setThumbMarkup();\n this.manageActiveClassOnSlideChange();\n this.$lgThumb.first().on('click.lg touchend.lg', (e: CustomEvent) => {\n const $target = this.$LG(e.target);\n if (!$target.hasAttribute('data-lg-item-id')) {\n return;\n }\n setTimeout(() => {\n // In IE9 and bellow touch does not support\n // Go to slide if browser does not support css transitions\n if (this.thumbClickable && !this.core.lgBusy) {\n const index = parseInt($target.attr('data-lg-item-id'));\n this.core.slide(index, false, true, false);\n }\n }, 50);\n });\n\n this.core.LGel.on(`${lGEvents.beforeSlide}.thumb`, (event) => {\n const { index } = event.detail;\n this.animateThumb(index);\n });\n this.core.LGel.on(`${lGEvents.beforeOpen}.thumb`, () => {\n this.thumbOuterWidth = this.core.outer.get().offsetWidth;\n });\n\n this.core.LGel.on(`${lGEvents.updateSlides}.thumb`, () => {\n this.rebuildThumbnails();\n });\n this.core.LGel.on(`${lGEvents.containerResize}.thumb`, () => {\n if (!this.core.lgOpened) return;\n setTimeout(() => {\n this.thumbOuterWidth = this.core.outer.get().offsetWidth;\n this.animateThumb(this.core.index);\n this.thumbOuterWidth = this.core.outer.get().offsetWidth;\n }, 50);\n });\n }\n\n setThumbMarkup(): void {\n let thumbOuterClassNames = 'lg-thumb-outer ';\n\n if (this.settings.alignThumbnails) {\n thumbOuterClassNames += `lg-thumb-align-${this.settings.alignThumbnails}`;\n }\n\n const html = `<div class=\"${thumbOuterClassNames}\">\n <div class=\"lg-thumb lg-group\">\n </div>\n </div>`;\n\n this.core.outer.addClass('lg-has-thumb');\n\n if (this.settings.appendThumbnailsTo === '.lg-components') {\n this.core.$lgComponents.append(html);\n } else {\n this.core.outer.append(html);\n }\n\n this.$thumbOuter = this.core.outer.find('.lg-thumb-outer').first();\n this.$lgThumb = this.core.outer.find('.lg-thumb').first();\n\n if (this.settings.animateThumb) {\n this.core.outer\n .find('.lg-thumb')\n .css('transition-duration', this.core.settings.speed + 'ms')\n .css('width', this.thumbTotalWidth + 'px')\n .css('position', 'relative');\n }\n\n this.setThumbItemHtml(\n (this.core.galleryItems as unknown) as ThumbnailGalleryItem[],\n );\n }\n\n enableThumbDrag(): void {\n let thumbDragUtils: ThumbDragUtils = {\n cords: {\n startX: 0,\n endX: 0,\n },\n isMoved: false,\n newTranslateX: 0,\n startTime: new Date(),\n endTime: new Date(),\n touchMoveTime: 0,\n };\n\n let isDragging = false;\n\n this.$thumbOuter.addClass('lg-grab');\n\n this.core.outer\n .find('.lg-thumb')\n .first()\n .on('mousedown.lg.thumb', (e) => {\n if (this.thumbTotalWidth > this.thumbOuterWidth) {\n // execute only on .lg-object\n e.preventDefault();\n thumbDragUtils.cords.startX = e.pageX;\n\n thumbDragUtils.startTime = new Date();\n this.thumbClickable = false;\n\n isDragging = true;\n\n // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723\n this.core.outer.get().scrollLeft += 1;\n this.core.outer.get().scrollLeft -= 1;\n\n // *\n this.$thumbOuter\n .removeClass('lg-grab')\n .addClass('lg-grabbing');\n }\n });\n\n this.$LG(window).on(\n `mousemove.lg.thumb.global${this.core.lgId}`,\n (e) => {\n if (!this.core.lgOpened) return;\n if (isDragging) {\n thumbDragUtils.cords.endX = e.pageX;\n\n thumbDragUtils = this.onThumbTouchMove(thumbDragUtils);\n }\n },\n );\n\n this.$LG(window).on(`mouseup.lg.thumb.global${this.core.lgId}`, () => {\n if (!this.core.lgOpened) return;\n if (thumbDragUtils.isMoved) {\n thumbDragUtils = this.onThumbTouchEnd(thumbDragUtils);\n } else {\n this.thumbClickable = true;\n }\n\n if (isDragging) {\n isDragging = false;\n this.$thumbOuter.removeClass('lg-grabbing').addClass('lg-grab');\n }\n });\n }\n\n enableThumbSwipe(): void {\n let thumbDragUtils: ThumbDragUtils = {\n cords: {\n startX: 0,\n endX: 0,\n },\n isMoved: false,\n newTranslateX: 0,\n startTime: new Date(),\n endTime: new Date(),\n touchMoveTime: 0,\n };\n\n this.$lgThumb.on('touchstart.lg', (e: TouchEvent) => {\n if (this.thumbTotalWidth > this.thumbOuterWidth) {\n e.preventDefault();\n thumbDragUtils.cords.startX = e.targetTouches[0].pageX;\n this.thumbClickable = false;\n thumbDragUtils.startTime = new Date();\n }\n });\n\n this.$lgThumb.on('touchmove.lg', (e: TouchEvent) => {\n if (this.thumbTotalWidth > this.thumbOuterWidth) {\n e.preventDefault();\n thumbDragUtils.cords.endX = e.targetTouches[0].pageX;\n thumbDragUtils = this.onThumbTouchMove(thumbDragUtils);\n }\n });\n\n this.$lgThumb.on('touchend.lg', () => {\n if (thumbDragUtils.isMoved) {\n thumbDragUtils = this.onThumbTouchEnd(thumbDragUtils);\n } else {\n this.thumbClickable = true;\n }\n });\n }\n\n // Rebuild thumbnails\n rebuildThumbnails(): void {\n // Remove transitions\n this.$thumbOuter.addClass('lg-rebuilding-thumbnails');\n setTimeout(() => {\n this.thumbTotalWidth =\n this.core.galleryItems.length *\n (this.settings.thumbWidth + this.settings.thumbMargin);\n this.$lgThumb.css('width', this.thumbTotalWidth + 'px');\n this.$lgThumb.empty();\n this.setThumbItemHtml(\n (this.core.galleryItems as unknown) as ThumbnailGalleryItem[],\n );\n this.animateThumb(this.core.index);\n }, 50);\n setTimeout(() => {\n this.$thumbOuter.removeClass('lg-rebuilding-thumbnails');\n }, 200);\n }\n\n // @ts-check\n\n setTranslate(value: number): void {\n this.$lgThumb.css(\n 'transform',\n 'translate3d(-' + value + 'px, 0px, 0px)',\n );\n }\n\n getPossibleTransformX(left: number): number {\n if (left > this.thumbTotalWidth - this.thumbOuterWidth) {\n left = this.thumbTotalWidth - this.thumbOuterWidth;\n }\n\n if (left < 0) {\n left = 0;\n }\n return left;\n }\n\n animateThumb(index: number): void {\n this.$lgThumb.css(\n 'transition-duration',\n this.core.settings.speed + 'ms',\n );\n if (this.settings.animateThumb) {\n let position = 0;\n switch (this.settings.currentPagerPosition) {\n case 'left':\n position = 0;\n break;\n case 'middle':\n position =\n this.thumbOuterWidth / 2 - this.settings.thumbWidth / 2;\n break;\n case 'right':\n position = this.thumbOuterWidth - this.settings.thumbWidth;\n }\n this.translateX =\n (this.settings.thumbWidth + this.settings.thumbMargin) * index -\n 1 -\n position;\n if (this.translateX > this.thumbTotalWidth - this.thumbOuterWidth) {\n this.translateX = this.thumbTotalWidth - this.thumbOuterWidth;\n }\n\n if (this.translateX < 0) {\n this.translateX = 0;\n }\n\n this.setTranslate(this.translateX);\n }\n }\n\n onThumbTouchMove(thumbDragUtils: ThumbDragUtils): ThumbDragUtils {\n thumbDragUtils.newTranslateX = this.translateX;\n thumbDragUtils.isMoved = true;\n\n thumbDragUtils.touchMoveTime = new Date().valueOf();\n\n thumbDragUtils.newTranslateX -=\n thumbDragUtils.cords.endX - thumbDragUtils.cords.startX;\n\n thumbDragUtils.newTranslateX = this.getPossibleTransformX(\n thumbDragUtils.newTranslateX,\n );\n\n // move current slide\n this.setTranslate(thumbDragUtils.newTranslateX);\n this.$thumbOuter.addClass('lg-dragging');\n\n return thumbDragUtils;\n }\n\n onThumbTouchEnd(thumbDragUtils: ThumbDragUtils): ThumbDragUtils {\n thumbDragUtils.isMoved = false;\n thumbDragUtils.endTime = new Date();\n this.$thumbOuter.removeClass('lg-dragging');\n\n const touchDuration =\n thumbDragUtils.endTime.valueOf() -\n thumbDragUtils.startTime.valueOf();\n let distanceXnew =\n thumbDragUtils.cords.endX - thumbDragUtils.cords.startX;\n let speedX = Math.abs(distanceXnew) / touchDuration;\n // Some magical numbers\n // Can be improved\n if (\n speedX > 0.15 &&\n thumbDragUtils.endTime.valueOf() - thumbDragUtils.touchMoveTime < 30\n ) {\n speedX += 1;\n\n if (speedX > 2) {\n speedX += 1;\n }\n speedX =\n speedX +\n speedX * (Math.abs(distanceXnew) / this.thumbOuterWidth);\n this.$lgThumb.css(\n 'transition-duration',\n Math.min(speedX - 1, 2) + 'settings',\n );\n\n distanceXnew = distanceXnew * speedX;\n\n this.translateX = this.getPossibleTransformX(\n this.translateX - distanceXnew,\n );\n this.setTranslate(this.translateX);\n } else {\n this.translateX = thumbDragUtils.newTranslateX;\n }\n if (\n Math.abs(thumbDragUtils.cords.endX - thumbDragUtils.cords.startX) <\n this.settings.thumbnailSwipeThreshold\n ) {\n this.thumbClickable = true;\n }\n\n return thumbDragUtils;\n }\n\n getThumbHtml(thumb: string, index: number): string {\n const slideVideoInfo =\n this.core.galleryItems[index].__slideVideoInfo || {};\n let thumbImg;\n\n if (slideVideoInfo.youtube) {\n if (this.settings.loadYouTubeThumbnail) {\n thumbImg =\n '//img.youtube.com/vi/' +\n slideVideoInfo.youtube[1] +\n '/' +\n this.settings.youTubeThumbSize +\n '.jpg';\n } else {\n thumbImg = thumb;\n }\n } else {\n thumbImg = thumb;\n }\n\n return `<div data-lg-item-id=\"${index}\" class=\"lg-thumb-item ${\n index === this.core.index ? ' active' : ''\n }\" \n style=\"width:${this.settings.thumbWidth}px; height: ${\n this.settings.thumbHeight\n };\n margin-right: ${this.settings.thumbMargin}px;\">\n <img data-lg-item-id=\"${index}\" src=\"${thumbImg}\" />\n </div>`;\n }\n\n getThumbItemHtml(items: ThumbnailGalleryItem[]): string {\n let thumbList = '';\n for (let i = 0; i < items.length; i++) {\n thumbList += this.getThumbHtml(items[i].thumb, i);\n }\n\n return thumbList;\n }\n\n setThumbItemHtml(items: ThumbnailGalleryItem[]): void {\n const thumbList = this.getThumbItemHtml(items);\n this.$lgThumb.html(thumbList);\n }\n\n setAnimateThumbStyles(): void {\n if (this.settings.animateThumb) {\n this.core.outer.addClass('lg-animate-thumb');\n }\n }\n\n // Manage thumbnail active calss\n manageActiveClassOnSlideChange(): void {\n // manage active class for thumbnail\n this.core.LGel.on(\n `${lGEvents.beforeSlide}.thumb`,\n (event: CustomEvent) => {\n const $thumb = this.core.outer.find('.lg-thumb-item');\n const { index } = event.detail;\n $thumb.removeClass('active');\n $thumb.eq(index).addClass('active');\n },\n );\n }\n\n // Toggle thumbnail bar\n toggleThumbBar(): void {\n if (this.settings.toggleThumb) {\n this.core.outer.addClass('lg-can-toggle');\n this.core.$toolbar.append(\n '<button type=\"button\" aria-label=\"Toggle thumbnails\" class=\"lg-toggle-thumb lg-icon\"></button>',\n );\n this.core.outer\n .find('.lg-toggle-thumb')\n .first()\n .on('click.lg', () => {\n this.core.outer.toggleClass('lg-components-open');\n });\n }\n }\n\n thumbKeyPress(): void {\n this.$LG(window).on(`keydown.lg.thumb.global${this.core.lgId}`, (e) => {\n if (!this.core.lgOpened || !this.settings.toggleThumb) return;\n\n if (e.keyCode === 38) {\n e.preventDefault();\n this.core.outer.addClass('lg-components-open');\n } else if (e.keyCode === 40) {\n e.preventDefault();\n this.core.outer.removeClass('lg-components-open');\n }\n });\n }\n\n destroy(): void {\n if (this.settings.thumbnail) {\n this.$LG(window).off(`.lg.thumb.global${this.core.lgId}`);\n this.core.LGel.off('.lg.thumb');\n this.core.LGel.off('.thumb');\n this.$thumbOuter.remove();\n this.core.outer.removeClass('lg-has-thumb');\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { PlayerParams } from './lg-video-utils';
1
2
  export interface VideoSettings {
2
3
  /**
3
4
  * Enable/DIsable first video autoplay.
@@ -32,7 +33,7 @@ export interface VideoSettings {
32
33
  * }
33
34
  * })
34
35
  */
35
- vimeoPlayerParams: any;
36
+ vimeoPlayerParams: PlayerParams;
36
37
  /**
37
38
  * Change Wistia player parameters.
38
39
  * You can find the list of Wistia player parameters from the following link
@@ -0,0 +1,6 @@
1
+ import { VideoInfo } from '../../types';
2
+ export declare type PlayerParams = Record<string, string | number | boolean> | boolean;
3
+ export declare const param: (obj: {
4
+ [x: string]: string | number | boolean;
5
+ }) => string;
6
+ export declare const getVimeoURLParams: (defaultParams: PlayerParams, videoInfo?: VideoInfo | undefined) => string;
@@ -18,6 +18,10 @@
18
18
  * https://developers.google.com/youtube/iframe_api_reference
19
19
  * https://developer.chrome.com/blog/autoplay/#iframe-delegation
20
20
  *
21
+ * @ref Vimeo
22
+ * https://stackoverflow.com/questions/10488943/easy-way-to-get-vimeo-id-from-a-vimeo-url
23
+ * https://vimeo.zendesk.com/hc/en-us/articles/360000121668-Starting-playback-at-a-specific-timecode
24
+ * https://vimeo.zendesk.com/hc/en-us/articles/360001494447-Using-Player-Parameters
21
25
  */
22
26
  import { LightGallery } from '../../lightgallery';
23
27
  import { lgQuery } from '../../lgQuery';
@@ -68,6 +72,7 @@ export default class Video {
68
72
  * @todo should check on onSlideLoad as well if video is not loaded on after slide
69
73
  */
70
74
  onAfterSlide(event: CustomEventAfterSlide): void;
75
+ loadAndPlayVideo(index: number): void;
71
76
  /**
72
77
  * Play HTML5, Youtube, Vimeo or Wistia videos in a particular slide.
73
78
  * @param {number} index - Index of the slide
@@ -93,7 +98,7 @@ export default class Video {
93
98
  }): any;
94
99
  gotoNextSlideOnVideoEnd(src: any, index: number): void;
95
100
  controlVideo(index: number, action: string): void;
96
- loadVideoOnPosterClick($el: lgQuery): void;
101
+ loadVideoOnPosterClick($el: lgQuery, forcePlay?: boolean): void;
97
102
  onVideoLoadAfterPosterClick($el: lgQuery, index: number): void;
98
103
  destroy(): void;
99
104
  }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * lightgallery | 2.3.0-beta | August 29th 2021
2
+ * lightgallery | 2.3.0-beta.4 | October 11th 2021
3
3
  * http://www.lightgalleryjs.com/
4
4
  * Copyright (c) 2020 Sachin Neravath;
5
5
  * @license GPLv3
@@ -73,6 +73,27 @@ var lGEvents = {
73
73
  flipVertical: 'lgFlipVertical',
74
74
  };
75
75
 
76
+ var param = function (obj) {
77
+ return Object.keys(obj)
78
+ .map(function (k) {
79
+ return encodeURIComponent(k) + '=' + encodeURIComponent(obj[k]);
80
+ })
81
+ .join('&');
82
+ };
83
+ var getVimeoURLParams = function (defaultParams, videoInfo) {
84
+ if (!videoInfo || !videoInfo.vimeo)
85
+ return '';
86
+ var urlParams = videoInfo.vimeo[2] || '';
87
+ urlParams =
88
+ urlParams[0] == '?' ? '&' + urlParams.slice(1) : urlParams || '';
89
+ var defaultPlayerParams = defaultParams
90
+ ? '&' + param(defaultParams)
91
+ : '';
92
+ // For vimeo last parms gets priority if duplicates found
93
+ var vimeoPlayerParams = "?autoplay=0&muted=1" + defaultPlayerParams + urlParams;
94
+ return vimeoPlayerParams;
95
+ };
96
+
76
97
  /**
77
98
  * Video module for lightGallery
78
99
  * Supports HTML5, YouTube, Vimeo, wistia videos
@@ -93,14 +114,11 @@ var lGEvents = {
93
114
  * https://developers.google.com/youtube/iframe_api_reference
94
115
  * https://developer.chrome.com/blog/autoplay/#iframe-delegation
95
116
  *
117
+ * @ref Vimeo
118
+ * https://stackoverflow.com/questions/10488943/easy-way-to-get-vimeo-id-from-a-vimeo-url
119
+ * https://vimeo.zendesk.com/hc/en-us/articles/360000121668-Starting-playback-at-a-specific-timecode
120
+ * https://vimeo.zendesk.com/hc/en-us/articles/360001494447-Using-Player-Parameters
96
121
  */
97
- function param(obj) {
98
- return Object.keys(obj)
99
- .map(function (k) {
100
- return encodeURIComponent(k) + '=' + encodeURIComponent(obj[k]);
101
- })
102
- .join('&');
103
- }
104
122
  var Video = /** @class */ (function () {
105
123
  function Video(instance) {
106
124
  // get lightGallery core plugin instance
@@ -140,17 +158,15 @@ var Video = /** @class */ (function () {
140
158
  index === this.core.index) {
141
159
  // Delay is just for the transition effect on video load
142
160
  setTimeout(function () {
143
- var currentGalleryItem = _this.core.galleryItems[index];
144
- var poster = currentGalleryItem.poster;
145
- if (poster) {
146
- var $slide = _this.core.getSlideItem(index);
147
- _this.loadVideoOnPosterClick($slide);
148
- }
149
- else {
150
- _this.playVideo(index);
151
- }
161
+ _this.loadAndPlayVideo(index);
152
162
  }, 200);
153
163
  }
164
+ // Should not call on first slide. should check only if the slide is active
165
+ if (!isFirstSlide &&
166
+ this.settings.autoplayVideoOnSlide &&
167
+ index === this.core.index) {
168
+ this.loadAndPlayVideo(index);
169
+ }
154
170
  };
155
171
  /**
156
172
  * @desc Event triggered when video url or poster found
@@ -201,16 +217,23 @@ var Video = /** @class */ (function () {
201
217
  var _this = this;
202
218
  var _a = event.detail, index = _a.index, prevIndex = _a.prevIndex;
203
219
  // Do not call on first slide
220
+ var $slide = this.core.getSlideItem(index);
204
221
  if (this.settings.autoplayVideoOnSlide && index !== prevIndex) {
205
- setTimeout(function () {
206
- var $slide = _this.core.getSlideItem(index);
207
- if (!$slide.hasClass('lg-video-loaded')) {
208
- _this.loadVideoOnPosterClick($slide);
209
- }
210
- else {
211
- _this.playVideo(index);
212
- }
213
- }, 100);
222
+ if ($slide.hasClass('lg-complete')) {
223
+ setTimeout(function () {
224
+ _this.loadAndPlayVideo(index);
225
+ }, 100);
226
+ }
227
+ }
228
+ };
229
+ Video.prototype.loadAndPlayVideo = function (index) {
230
+ var $slide = this.core.getSlideItem(index);
231
+ var currentGalleryItem = this.core.galleryItems[index];
232
+ if (currentGalleryItem.poster) {
233
+ this.loadVideoOnPosterClick($slide, true);
234
+ }
235
+ else {
236
+ this.playVideo(index);
214
237
  }
215
238
  };
216
239
  /**
@@ -240,6 +263,7 @@ var Video = /** @class */ (function () {
240
263
  var slideUrlParams = videoInfo.youtube[2]
241
264
  ? videoInfo.youtube[2] + '&'
242
265
  : '';
266
+ // For youtube first parms gets priority if duplicates found
243
267
  var youTubePlayerParams = "?" + slideUrlParams + "wmode=opaque&autoplay=0&mute=1&enablejsapi=1";
244
268
  var playerParams = youTubePlayerParams +
245
269
  (this.settings.youTubePlayerParams
@@ -249,12 +273,13 @@ var Video = /** @class */ (function () {
249
273
  }
250
274
  else if (videoInfo.vimeo) {
251
275
  var videoId = 'lg-vimeo' + index;
252
- var playerParams = param(this.settings.vimeoPlayerParams);
276
+ var playerParams = getVimeoURLParams(this.settings.vimeoPlayerParams, videoInfo);
253
277
  video = "<iframe allow=\"autoplay\" id=" + videoId + " class=\"lg-video-object lg-vimeo " + addClass + "\" " + videoTitle + " src=\"//player.vimeo.com/video/" + (videoInfo.vimeo[1] + playerParams) + "\" " + commonIframeProps + "></iframe>";
254
278
  }
255
279
  else if (videoInfo.wistia) {
256
280
  var wistiaId = 'lg-wistia' + index;
257
281
  var playerParams = param(this.settings.wistiaPlayerParams);
282
+ playerParams = playerParams ? '?' + playerParams : '';
258
283
  video = "<iframe allow=\"autoplay\" id=\"" + wistiaId + "\" src=\"//fast.wistia.net/embed/iframe/" + (videoInfo.wistia[4] + playerParams) + "\" " + videoTitle + " class=\"wistia_embed lg-video-object lg-wistia " + addClass + "\" name=\"wistia_embed\" " + commonIframeProps + "></iframe>";
259
284
  }
260
285
  else if (videoInfo.html5) {
@@ -405,7 +430,7 @@ var Video = /** @class */ (function () {
405
430
  }
406
431
  }
407
432
  };
408
- Video.prototype.loadVideoOnPosterClick = function ($el) {
433
+ Video.prototype.loadVideoOnPosterClick = function ($el, forcePlay) {
409
434
  var _this = this;
410
435
  // check slide has poster
411
436
  if (!$el.hasClass('lg-video-loaded')) {
@@ -438,7 +463,7 @@ var Video = /** @class */ (function () {
438
463
  });
439
464
  $el.find('.lg-video-object')
440
465
  .first()
441
- .on('load.lg error.lg loadeddata.lg', function () {
466
+ .on('load.lg error.lg loadedmetadata.lg', function () {
442
467
  setTimeout(function () {
443
468
  _this.onVideoLoadAfterPosterClick($el, _this.core.index);
444
469
  }, 50);
@@ -448,6 +473,9 @@ var Video = /** @class */ (function () {
448
473
  this.playVideo(this.core.index);
449
474
  }
450
475
  }
476
+ else if (forcePlay) {
477
+ this.playVideo(this.core.index);
478
+ }
451
479
  };
452
480
  Video.prototype.onVideoLoadAfterPosterClick = function ($el, index) {
453
481
  $el.addClass('lg-video-loaded');
@@ -1 +1 @@
1
- {"version":3,"file":"lg-video.es5.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 * <a href=\"https://developers.google.com/youtube/player_parameters\">YouTube player parameters</a>\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 * <a href=\"https://developer.vimeo.com/player/embedding#universal-parameters\">Vimeo player parameters</a>\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 * <a href=\"https://wistia.com/support/developers/embed-options#using-embed-options\">Vimeo player parameters</a>\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 * <div class=\"alert alert-info\" role=\"alert\">\n * <b>Dependency</b> - You need to include <a href=\"https://videojs.com/\">videoJs</div> on your document to enable videojs player\n * </div>\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 rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\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 <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 * 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 * https://developer.chrome.com/blog/autoplay/#iframe-delegation\n *\n */\n\nimport { VideoSettings, videoSettings } from './lg-video-settings';\nimport { LightGallery } from '../../lightgallery';\nimport { lgQuery } from '../../lgQuery';\nimport {\n CustomEventAfterSlide,\n CustomEventHasVideo,\n CustomEventSlideItemLoad,\n} 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 this.core.LGel.on(`${lGEvents.posterClick}.video`, () => {\n const $el = this.core.getSlideItem(this.core.index);\n this.loadVideoOnPosterClick($el);\n });\n this.core.LGel.on(\n `${lGEvents.slideItemLoad}.video`,\n this.onSlideItemLoad.bind(this),\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 a slide is completely loaded\n *\n * @param {Event} event - lightGalley custom event\n */\n onSlideItemLoad(event: CustomEventSlideItemLoad): void {\n const { isFirstSlide, index } = event.detail;\n\n // Should check the active slide as well as user may have moved to different slide before the first slide is loaded\n if (\n this.settings.autoplayFirstVideo &&\n isFirstSlide &&\n index === this.core.index\n ) {\n // Delay is just for the transition effect on video load\n setTimeout(() => {\n const currentGalleryItem = this.core.galleryItems[index];\n const { poster } = currentGalleryItem;\n if (poster) {\n const $slide = this.core.getSlideItem(index);\n this.loadVideoOnPosterClick($slide);\n } else {\n this.playVideo(index);\n }\n }, 200);\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 { index, src, html5Video, hasPoster } = 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\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): void {\n if (this.core.lGalleryOn) {\n const { prevIndex } = event.detail;\n this.pauseVideo(prevIndex);\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 * @todo should check on onSlideLoad as well if video is not loaded on after slide\n */\n onAfterSlide(event: CustomEventAfterSlide): void {\n const { index, prevIndex } = event.detail;\n // Do not call on first slide\n if (this.settings.autoplayVideoOnSlide && index !== prevIndex) {\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 slideUrlParams = videoInfo.youtube[2]\n ? videoInfo.youtube[2] + '&'\n : '';\n const youTubePlayerParams = `?${slideUrlParams}wmode=opaque&autoplay=0&mute=1&enablejsapi=1`;\n\n const playerParams =\n youTubePlayerParams +\n (this.settings.youTubePlayerParams\n ? '&' + param(this.settings.youTubePlayerParams)\n : '');\n\n video = `<iframe allow=\"autoplay\" id=${videoId} class=\"lg-video-object lg-youtube ${addClass}\" ${videoTitle} src=\"//www.youtube.com/embed/${\n videoInfo.youtube[1] + playerParams\n }\" ${commonIframeProps}></iframe>`;\n } else if (videoInfo.vimeo) {\n const videoId = 'lg-vimeo' + index;\n const playerParams = param(this.settings.vimeoPlayerParams);\n\n video = `<iframe allow=\"autoplay\" id=${videoId} class=\"lg-video-object lg-vimeo ${addClass}\" ${videoTitle} src=\"//player.vimeo.com/video/${\n videoInfo.vimeo[1] + playerParams\n }\" ${commonIframeProps}></iframe>`;\n } else if (videoInfo.wistia) {\n const wistiaId = 'lg-wistia' + index;\n const playerParams = param(this.settings.wistiaPlayerParams);\n video = `<iframe allow=\"autoplay\" id=\"${wistiaId}\" src=\"//fast.wistia.net/embed/iframe/${\n videoInfo.wistia[4] + playerParams\n }\" ${videoTitle} class=\"wistia_embed lg-video-object lg-wistia ${addClass}\" name=\"wistia_embed\" ${commonIframeProps}></iframe>`;\n } else if (videoInfo.html5) {\n let html5VideoMarkup = '';\n for (let i = 0; i < html5Video.source.length; i++) {\n html5VideoMarkup += `<source src=\"${html5Video.source[i].src}\" type=\"${html5Video.source[i].type}\">`;\n }\n if (html5Video.tracks) {\n for (let i = 0; i < html5Video.tracks.length; i++) {\n let trackAttributes = '';\n const track = html5Video.tracks[i];\n Object.keys(track || {}).forEach(function (key) {\n trackAttributes += `${key}=\"${(track as any)[key]}\" `;\n });\n html5VideoMarkup += `<track ${trackAttributes}>`;\n }\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 = `<video class=\"lg-video-object lg-html5 ${\n this.settings.videojs ? 'video-js' : ''\n }\" ${html5VideoAttrs}>\n ${html5VideoMarkup}\n Your browser does not support HTML5 video.\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 (videoParams.html5Video) {\n $videoElement.on('mousedown.lg.video', (e) => {\n e.stopPropagation();\n });\n }\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): void {\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 as string,\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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"}
1
+ {"version":3,"file":"lg-video.es5.js","sources":["../../../src/plugins/video/lg-video-settings.ts","../../../src/lg-events.ts","../../../src/plugins/video/lg-video-utils.ts","../../../src/plugins/video/lg-video.ts"],"sourcesContent":["import { PlayerParams } from './lg-video-utils';\n\nexport 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 * <a href=\"https://developers.google.com/youtube/player_parameters\">YouTube player parameters</a>\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 * <a href=\"https://developer.vimeo.com/player/embedding#universal-parameters\">Vimeo player parameters</a>\n * @example\n * lightGallery(document.getElementById('lightGallery'), {\n * vimeoPlayerParams: {\n * byline : 0,\n * portrait : 0,\n * color : 'CCCCCC'\n * }\n * })\n */\n vimeoPlayerParams: PlayerParams;\n\n /**\n * Change Wistia player parameters.\n * You can find the list of Wistia player parameters from the following link\n * <a href=\"https://wistia.com/support/developers/embed-options#using-embed-options\">Vimeo player parameters</a>\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 * <div class=\"alert alert-info\" role=\"alert\">\n * <b>Dependency</b> - You need to include <a href=\"https://videojs.com/\">videoJs</div> on your document to enable videojs player\n * </div>\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 rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\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 <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","import { VideoInfo } from '../../types';\nexport type PlayerParams = Record<string, string | number | boolean> | boolean;\n\nexport const param = (obj: {\n [x: string]: string | number | boolean;\n}): string => {\n return Object.keys(obj)\n .map(function (k) {\n return encodeURIComponent(k) + '=' + encodeURIComponent(obj[k]);\n })\n .join('&');\n};\nexport const getVimeoURLParams = (\n defaultParams: PlayerParams,\n videoInfo?: VideoInfo,\n): string => {\n if (!videoInfo || !videoInfo.vimeo) return '';\n let urlParams = videoInfo.vimeo[2] || '';\n urlParams =\n urlParams[0] == '?' ? '&' + urlParams.slice(1) : urlParams || '';\n\n const defaultPlayerParams = defaultParams\n ? '&' + param(defaultParams as any)\n : '';\n\n // For vimeo last parms gets priority if duplicates found\n const vimeoPlayerParams = `?autoplay=0&muted=1${defaultPlayerParams}${urlParams}`;\n return vimeoPlayerParams;\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 * https://developer.chrome.com/blog/autoplay/#iframe-delegation\n *\n * @ref Vimeo\n * https://stackoverflow.com/questions/10488943/easy-way-to-get-vimeo-id-from-a-vimeo-url\n * https://vimeo.zendesk.com/hc/en-us/articles/360000121668-Starting-playback-at-a-specific-timecode\n * https://vimeo.zendesk.com/hc/en-us/articles/360001494447-Using-Player-Parameters\n */\n\nimport { VideoSettings, videoSettings } from './lg-video-settings';\nimport { LightGallery } from '../../lightgallery';\nimport { lgQuery } from '../../lgQuery';\nimport {\n CustomEventAfterSlide,\n CustomEventHasVideo,\n CustomEventSlideItemLoad,\n VideoInfo,\n} from '../../types';\nimport { lGEvents } from '../../lg-events';\nimport { VideoSource } from './types';\nimport { getVimeoURLParams, param } from './lg-video-utils';\n\ndeclare let Vimeo: any;\ndeclare let videojs: any;\ndeclare global {\n interface Window {\n _wq: any;\n Vimeo: any;\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 this.core.LGel.on(`${lGEvents.posterClick}.video`, () => {\n const $el = this.core.getSlideItem(this.core.index);\n this.loadVideoOnPosterClick($el);\n });\n this.core.LGel.on(\n `${lGEvents.slideItemLoad}.video`,\n this.onSlideItemLoad.bind(this),\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 a slide is completely loaded\n *\n * @param {Event} event - lightGalley custom event\n */\n onSlideItemLoad(event: CustomEventSlideItemLoad): void {\n const { isFirstSlide, index } = event.detail;\n\n // Should check the active slide as well as user may have moved to different slide before the first slide is loaded\n if (\n this.settings.autoplayFirstVideo &&\n isFirstSlide &&\n index === this.core.index\n ) {\n // Delay is just for the transition effect on video load\n setTimeout(() => {\n this.loadAndPlayVideo(index);\n }, 200);\n }\n\n // Should not call on first slide. should check only if the slide is active\n if (\n !isFirstSlide &&\n this.settings.autoplayVideoOnSlide &&\n index === this.core.index\n ) {\n this.loadAndPlayVideo(index);\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 { index, src, html5Video, hasPoster } = 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\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): void {\n if (this.core.lGalleryOn) {\n const { prevIndex } = event.detail;\n this.pauseVideo(prevIndex);\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 * @todo should check on onSlideLoad as well if video is not loaded on after slide\n */\n onAfterSlide(event: CustomEventAfterSlide): void {\n const { index, prevIndex } = event.detail;\n // Do not call on first slide\n const $slide = this.core.getSlideItem(index);\n if (this.settings.autoplayVideoOnSlide && index !== prevIndex) {\n if ($slide.hasClass('lg-complete')) {\n setTimeout(() => {\n this.loadAndPlayVideo(index);\n }, 100);\n }\n }\n }\n\n loadAndPlayVideo(index: number): void {\n const $slide = this.core.getSlideItem(index);\n const currentGalleryItem = this.core.galleryItems[index];\n if (currentGalleryItem.poster) {\n this.loadVideoOnPosterClick($slide, true);\n } else {\n this.playVideo(index);\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 slideUrlParams = videoInfo.youtube[2]\n ? videoInfo.youtube[2] + '&'\n : '';\n // For youtube first parms gets priority if duplicates found\n const youTubePlayerParams = `?${slideUrlParams}wmode=opaque&autoplay=0&mute=1&enablejsapi=1`;\n\n const playerParams =\n youTubePlayerParams +\n (this.settings.youTubePlayerParams\n ? '&' + param(this.settings.youTubePlayerParams)\n : '');\n\n video = `<iframe allow=\"autoplay\" id=${videoId} class=\"lg-video-object lg-youtube ${addClass}\" ${videoTitle} src=\"//www.youtube.com/embed/${\n videoInfo.youtube[1] + playerParams\n }\" ${commonIframeProps}></iframe>`;\n } else if (videoInfo.vimeo) {\n const videoId = 'lg-vimeo' + index;\n const playerParams = getVimeoURLParams(\n this.settings.vimeoPlayerParams,\n videoInfo,\n );\n video = `<iframe allow=\"autoplay\" id=${videoId} class=\"lg-video-object lg-vimeo ${addClass}\" ${videoTitle} src=\"//player.vimeo.com/video/${\n videoInfo.vimeo[1] + playerParams\n }\" ${commonIframeProps}></iframe>`;\n } else if (videoInfo.wistia) {\n const wistiaId = 'lg-wistia' + index;\n let playerParams = param(this.settings.wistiaPlayerParams);\n playerParams = playerParams ? '?' + playerParams : '';\n video = `<iframe allow=\"autoplay\" id=\"${wistiaId}\" src=\"//fast.wistia.net/embed/iframe/${\n videoInfo.wistia[4] + playerParams\n }\" ${videoTitle} class=\"wistia_embed lg-video-object lg-wistia ${addClass}\" name=\"wistia_embed\" ${commonIframeProps}></iframe>`;\n } else if (videoInfo.html5) {\n let html5VideoMarkup = '';\n for (let i = 0; i < html5Video.source.length; i++) {\n html5VideoMarkup += `<source src=\"${html5Video.source[i].src}\" type=\"${html5Video.source[i].type}\">`;\n }\n if (html5Video.tracks) {\n for (let i = 0; i < html5Video.tracks.length; i++) {\n let trackAttributes = '';\n const track = html5Video.tracks[i];\n Object.keys(track || {}).forEach(function (key) {\n trackAttributes += `${key}=\"${(track as any)[key]}\" `;\n });\n html5VideoMarkup += `<track ${trackAttributes}>`;\n }\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 = `<video class=\"lg-video-object lg-html5 ${\n this.settings.videojs ? 'video-js' : ''\n }\" ${html5VideoAttrs}>\n ${html5VideoMarkup}\n Your browser does not support HTML5 video.\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 (videoParams.html5Video) {\n $videoElement.on('mousedown.lg.video', (e) => {\n e.stopPropagation();\n });\n }\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, forcePlay?: boolean): void {\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 as string,\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 loadedmetadata.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 } else if (forcePlay) {\n this.playVideo(this.core.index);\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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"}