lightgallery 2.5.0-beta.2 → 2.5.0-beta.5

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 (73) hide show
  1. package/README.md +3 -3
  2. package/css/lightgallery-bundle.css +15 -0
  3. package/css/lightgallery-bundle.min.css +1 -1
  4. package/css/lightgallery-core.css +4 -0
  5. package/css/lightgallery.css +15 -0
  6. package/lg-settings.d.ts +14 -0
  7. package/lg-utils.d.ts +1 -0
  8. package/lib/lg-settings.js +3 -0
  9. package/lib/lg-settings.js.map +1 -1
  10. package/lib/lg-utils.js +8 -0
  11. package/lib/lg-utils.js.map +1 -1
  12. package/lib/lightgallery.js +69 -5
  13. package/lib/lightgallery.js.map +1 -1
  14. package/lightgallery.d.ts +5 -0
  15. package/lightgallery.es5.js +81 -6
  16. package/lightgallery.es5.js.map +1 -1
  17. package/lightgallery.min.js +2 -2
  18. package/lightgallery.umd.js +81 -6
  19. package/lightgallery.umd.js.map +1 -1
  20. package/lit/lightgallery.esm.js +7 -7
  21. package/lit/lightgallery.umd.js +3 -3
  22. package/package.json +1 -1
  23. package/plugins/autoplay/lg-autoplay.es5.js +1 -1
  24. package/plugins/autoplay/lg-autoplay.min.js +1 -1
  25. package/plugins/autoplay/lg-autoplay.umd.js +1 -1
  26. package/plugins/comment/lg-comment.es5.js +1 -1
  27. package/plugins/comment/lg-comment.min.js +1 -1
  28. package/plugins/comment/lg-comment.umd.js +1 -1
  29. package/plugins/fullscreen/lg-fullscreen.es5.js +1 -1
  30. package/plugins/fullscreen/lg-fullscreen.min.js +1 -1
  31. package/plugins/fullscreen/lg-fullscreen.umd.js +1 -1
  32. package/plugins/hash/lg-hash.es5.js +1 -1
  33. package/plugins/hash/lg-hash.min.js +1 -1
  34. package/plugins/hash/lg-hash.umd.js +1 -1
  35. package/plugins/mediumZoom/lg-medium-zoom.es5.js +1 -1
  36. package/plugins/mediumZoom/lg-medium-zoom.min.js +1 -1
  37. package/plugins/mediumZoom/lg-medium-zoom.umd.js +1 -1
  38. package/plugins/pager/lg-pager.es5.js +1 -1
  39. package/plugins/pager/lg-pager.min.js +1 -1
  40. package/plugins/pager/lg-pager.umd.js +1 -1
  41. package/plugins/relativeCaption/lg-relative-caption.es5.js +1 -1
  42. package/plugins/relativeCaption/lg-relative-caption.min.js +1 -1
  43. package/plugins/relativeCaption/lg-relative-caption.umd.js +1 -1
  44. package/plugins/rotate/lg-rotate.es5.js +1 -1
  45. package/plugins/rotate/lg-rotate.min.js +1 -1
  46. package/plugins/rotate/lg-rotate.umd.js +1 -1
  47. package/plugins/share/lg-share.es5.js +1 -1
  48. package/plugins/share/lg-share.min.js +1 -1
  49. package/plugins/share/lg-share.umd.js +1 -1
  50. package/plugins/thumbnail/lg-thumbnail.es5.js +1 -1
  51. package/plugins/thumbnail/lg-thumbnail.min.js +1 -1
  52. package/plugins/thumbnail/lg-thumbnail.umd.js +1 -1
  53. package/plugins/video/lg-video.es5.js +1 -1
  54. package/plugins/video/lg-video.min.js +1 -1
  55. package/plugins/video/lg-video.umd.js +1 -1
  56. package/plugins/vimeoThumbnail/lg-vimeo-thumbnail.es5.js +1 -1
  57. package/plugins/vimeoThumbnail/lg-vimeo-thumbnail.min.js +1 -1
  58. package/plugins/vimeoThumbnail/lg-vimeo-thumbnail.umd.js +1 -1
  59. package/plugins/zoom/lg-zoom.es5.js +1 -1
  60. package/plugins/zoom/lg-zoom.min.js +1 -1
  61. package/plugins/zoom/lg-zoom.umd.js +1 -1
  62. package/react/Lightgallery.es5.js +81 -6
  63. package/react/Lightgallery.es5.js.map +1 -1
  64. package/react/Lightgallery.umd.js +81 -6
  65. package/react/Lightgallery.umd.js.map +1 -1
  66. package/scss/_lg-theme-default.scss +16 -0
  67. package/scss/lightgallery-core.scss +3 -0
  68. package/vue/LightGalleryVue.common.js +123 -32
  69. package/vue/LightGalleryVue.common.js.map +1 -1
  70. package/vue/LightGalleryVue.umd.js +123 -32
  71. package/vue/LightGalleryVue.umd.js.map +1 -1
  72. package/vue/LightGalleryVue.umd.min.js +2 -2
  73. package/vue/LightGalleryVue.umd.min.js.map +1 -1
@@ -28,7 +28,7 @@ function __rest(s, e) {
28
28
  }
29
29
 
30
30
  /*!
31
- * lightgallery | 2.5.0-beta.2 | March 6th 2022
31
+ * lightgallery | 2.5.0-beta.5 | May 11th 2022
32
32
  * http://www.lightgalleryjs.com/
33
33
  * Copyright (c) 2020 Sachin Neravath;
34
34
  * @license GPLv3
@@ -125,6 +125,8 @@ var lightGalleryCoreSettings = {
125
125
  defaultCaptionHeight: 0,
126
126
  ariaLabelledby: '',
127
127
  ariaDescribedby: '',
128
+ resetScrollPosition: true,
129
+ hideScrollbar: false,
128
130
  closable: true,
129
131
  swipeToClose: true,
130
132
  closeOnTap: true,
@@ -133,6 +135,7 @@ var lightGalleryCoreSettings = {
133
135
  loop: true,
134
136
  escKey: true,
135
137
  keyPress: true,
138
+ trapFocus: true,
136
139
  controls: true,
137
140
  slideEndAnimation: true,
138
141
  hideControlOnEnd: false,
@@ -749,6 +752,14 @@ var utils = {
749
752
  }
750
753
  return "<div class=\"lg-video-cont " + videoClass + "\" style=\"" + videoContStyle + "\">\n <div class=\"lg-video-play-button\">\n <svg\n viewBox=\"0 0 20 20\"\n preserveAspectRatio=\"xMidYMid\"\n focusable=\"false\"\n aria-labelledby=\"" + playVideoString + "\"\n role=\"img\"\n class=\"lg-video-play-icon\"\n >\n <title>" + playVideoString + "</title>\n <polygon class=\"lg-video-play-icon-inner\" points=\"1,0 20,10 1,20\"></polygon>\n </svg>\n <svg class=\"lg-video-play-icon-bg\" viewBox=\"0 0 50 50\" focusable=\"false\">\n <circle cx=\"50%\" cy=\"50%\" r=\"20\"></circle></svg>\n <svg class=\"lg-video-play-icon-circle\" viewBox=\"0 0 50 50\" focusable=\"false\">\n <circle cx=\"50%\" cy=\"50%\" r=\"20\"></circle>\n </svg>\n </div>\n " + (dummyImg || '') + "\n <img class=\"lg-object lg-video-poster\" src=\"" + _poster + "\" />\n </div>";
751
754
  },
755
+ getFocusableElements: function (container) {
756
+ var elements = container.querySelectorAll('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled])');
757
+ var visibleElements = [].filter.call(elements, function (element) {
758
+ var style = window.getComputedStyle(element);
759
+ return style.display !== 'none' && style.visibility !== 'hidden';
760
+ });
761
+ return visibleElements;
762
+ },
752
763
  /**
753
764
  * @desc Create dynamic elements array from gallery items when dynamic option is false
754
765
  * It helps to avoid frequent DOM interaction
@@ -852,6 +863,7 @@ var LightGallery = /** @class */ (function () {
852
863
  this.currentItemsInDom = [];
853
864
  // Scroll top value before lightGallery is opened
854
865
  this.prevScrollTop = 0;
866
+ this.bodyPaddingRight = 0;
855
867
  this.isDummyImageRemoved = false;
856
868
  this.dragOrSwipeEnabled = false;
857
869
  this.mediaContainerPosition = {
@@ -1199,6 +1211,27 @@ var LightGallery = /** @class */ (function () {
1199
1211
  return this.settings.dynamicEl || [];
1200
1212
  }
1201
1213
  };
1214
+ LightGallery.prototype.shouldHideScrollbar = function () {
1215
+ return (this.settings.hideScrollbar &&
1216
+ document.body === this.settings.container);
1217
+ };
1218
+ LightGallery.prototype.hideScrollbar = function () {
1219
+ if (!this.shouldHideScrollbar()) {
1220
+ return;
1221
+ }
1222
+ this.bodyPaddingRight = parseFloat($LG('body').style().paddingRight);
1223
+ var bodyRect = document.documentElement.getBoundingClientRect();
1224
+ var scrollbarWidth = window.innerWidth - bodyRect.width;
1225
+ $LG(document.body).css('padding-right', scrollbarWidth + this.bodyPaddingRight + 'px');
1226
+ $LG(document.body).addClass('lg-overlay-open');
1227
+ };
1228
+ LightGallery.prototype.resetScrollBar = function () {
1229
+ if (!this.shouldHideScrollbar()) {
1230
+ return;
1231
+ }
1232
+ $LG(document.body).css('padding-right', this.bodyPaddingRight + 'px');
1233
+ $LG(document.body).removeClass('lg-overlay-open');
1234
+ };
1202
1235
  /**
1203
1236
  * Open lightGallery.
1204
1237
  * Open gallery with specific slide by passing index of the slide as parameter.
@@ -1234,8 +1267,8 @@ var LightGallery = /** @class */ (function () {
1234
1267
  if (this.lgOpened)
1235
1268
  return;
1236
1269
  this.lgOpened = true;
1237
- this.outer.get().focus();
1238
1270
  this.outer.removeClass('lg-hide-items');
1271
+ this.hideScrollbar();
1239
1272
  // Add display block, but still has opacity 0
1240
1273
  this.$container.addClass('lg-show');
1241
1274
  var itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(index, index);
@@ -1294,6 +1327,12 @@ var LightGallery = /** @class */ (function () {
1294
1327
  _this.$backdrop.addClass('in');
1295
1328
  _this.$container.addClass('lg-show-in');
1296
1329
  }, 10);
1330
+ setTimeout(function () {
1331
+ if (_this.settings.trapFocus &&
1332
+ document.body === _this.settings.container) {
1333
+ _this.trapFocus();
1334
+ }
1335
+ }, _this.settings.backdropDuration + 50);
1297
1336
  // lg-visible class resets gallery opacity to 1
1298
1337
  if (!_this.zoomFromOrigin || !transform) {
1299
1338
  setTimeout(function () {
@@ -1681,9 +1720,11 @@ var LightGallery = /** @class */ (function () {
1681
1720
  if (!$currentSlide.hasClass('lg-loaded')) {
1682
1721
  setTimeout(function () {
1683
1722
  if (_this.getSlideType(currentGalleryItem) === 'image') {
1723
+ var alt = currentGalleryItem.alt;
1724
+ var altAttr = alt ? 'alt="' + alt + '"' : '';
1684
1725
  $currentSlide
1685
1726
  .find('.lg-img-wrap')
1686
- .append(utils.getImgMarkup(index, src, '', srcset, sizes, currentGalleryItem.sources));
1727
+ .append(utils.getImgMarkup(index, src, altAttr, srcset, sizes, currentGalleryItem.sources));
1687
1728
  if (srcset || sources) {
1688
1729
  var $img = $currentSlide.find('.lg-object');
1689
1730
  _this.initPictureFill($img);
@@ -2469,6 +2510,36 @@ var LightGallery = /** @class */ (function () {
2469
2510
  $element.off("click.lgcustom-item-" + $element.attr('data-lg-id'));
2470
2511
  }
2471
2512
  };
2513
+ LightGallery.prototype.trapFocus = function () {
2514
+ var _this = this;
2515
+ this.$container.get().focus({
2516
+ preventScroll: true,
2517
+ });
2518
+ $LG(window).on("keydown.lg.global" + this.lgId, function (e) {
2519
+ if (!_this.lgOpened) {
2520
+ return;
2521
+ }
2522
+ var isTabPressed = e.key === 'Tab' || e.keyCode === 9;
2523
+ if (!isTabPressed) {
2524
+ return;
2525
+ }
2526
+ var focusableEls = utils.getFocusableElements(_this.$container.get());
2527
+ var firstFocusableEl = focusableEls[0];
2528
+ var lastFocusableEl = focusableEls[focusableEls.length - 1];
2529
+ if (e.shiftKey) {
2530
+ if (document.activeElement === firstFocusableEl) {
2531
+ lastFocusableEl.focus();
2532
+ e.preventDefault();
2533
+ }
2534
+ }
2535
+ else {
2536
+ if (document.activeElement === lastFocusableEl) {
2537
+ firstFocusableEl.focus();
2538
+ e.preventDefault();
2539
+ }
2540
+ }
2541
+ });
2542
+ };
2472
2543
  LightGallery.prototype.manageCloseGallery = function () {
2473
2544
  var _this = this;
2474
2545
  if (!this.settings.closable)
@@ -2519,7 +2590,9 @@ var LightGallery = /** @class */ (function () {
2519
2590
  return 0;
2520
2591
  }
2521
2592
  this.LGel.trigger(lGEvents.beforeClose);
2522
- $LG(window).scrollTop(this.prevScrollTop);
2593
+ if (this.settings.resetScrollPosition && !this.settings.hideScrollbar) {
2594
+ $LG(window).scrollTop(this.prevScrollTop);
2595
+ }
2523
2596
  var currentItem = this.items[this.index];
2524
2597
  var transform;
2525
2598
  if (this.zoomFromOrigin && currentItem) {
@@ -2564,6 +2637,8 @@ var LightGallery = /** @class */ (function () {
2564
2637
  _this.outer.removeClass('lg-zoom-from-image');
2565
2638
  }
2566
2639
  _this.$container.removeClass('lg-show');
2640
+ // Reset scrollbar
2641
+ _this.resetScrollBar();
2567
2642
  // Need to remove inline opacity as it is used in the stylesheet as well
2568
2643
  _this.$backdrop
2569
2644
  .removeAttr('style')
@@ -2576,8 +2651,8 @@ var LightGallery = /** @class */ (function () {
2576
2651
  instance: _this,
2577
2652
  });
2578
2653
  }
2579
- if (_this.outer.get()) {
2580
- _this.outer.get().blur();
2654
+ if (_this.$container.get()) {
2655
+ _this.$container.get().blur();
2581
2656
  }
2582
2657
  _this.lgOpened = false;
2583
2658
  }, removeTimeout + 100);