UNPKG

6.05 kBJavaScriptView Raw
1/*!
2 * lightgallery | 2.5.0 | June 13th 2022
3 * http://www.lightgalleryjs.com/
4 * Copyright (c) 2020 Sachin Neravath;
5 * @license GPLv3
6 */
7
8/*! *****************************************************************************
9Copyright (c) Microsoft Corporation.
10
11Permission to use, copy, modify, and/or distribute this software for any
12purpose with or without fee is hereby granted.
13
14THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
15REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
16AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
17INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
18LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
19OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20PERFORMANCE OF THIS SOFTWARE.
21***************************************************************************** */
22
23var __assign = function() {
24 __assign = Object.assign || function __assign(t) {
25 for (var s, i = 1, n = arguments.length; i < n; i++) {
26 s = arguments[i];
27 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
28 }
29 return t;
30 };
31 return __assign.apply(this, arguments);
32};
33
34/**
35 * List of lightGallery events
36 * All events should be documented here
37 * Below interfaces are used to build the website documentations
38 * */
39var lGEvents = {
40 afterAppendSlide: 'lgAfterAppendSlide',
41 init: 'lgInit',
42 hasVideo: 'lgHasVideo',
43 containerResize: 'lgContainerResize',
44 updateSlides: 'lgUpdateSlides',
45 afterAppendSubHtml: 'lgAfterAppendSubHtml',
46 beforeOpen: 'lgBeforeOpen',
47 afterOpen: 'lgAfterOpen',
48 slideItemLoad: 'lgSlideItemLoad',
49 beforeSlide: 'lgBeforeSlide',
50 afterSlide: 'lgAfterSlide',
51 posterClick: 'lgPosterClick',
52 dragStart: 'lgDragStart',
53 dragMove: 'lgDragMove',
54 dragEnd: 'lgDragEnd',
55 beforeNextSlide: 'lgBeforeNextSlide',
56 beforePrevSlide: 'lgBeforePrevSlide',
57 beforeClose: 'lgBeforeClose',
58 afterClose: 'lgAfterClose',
59 rotateLeft: 'lgRotateLeft',
60 rotateRight: 'lgRotateRight',
61 flipHorizontal: 'lgFlipHorizontal',
62 flipVertical: 'lgFlipVertical',
63 autoplay: 'lgAutoplay',
64 autoplayStart: 'lgAutoplayStart',
65 autoplayStop: 'lgAutoplayStop',
66};
67
68var relativeCaptionSettings = {
69 relativeCaption: false,
70};
71
72/**
73 * lightGallery caption for placing captions relative to the image
74 */
75var RelativeCaption = /** @class */ (function () {
76 function RelativeCaption(instance) {
77 // get lightGallery core plugin instance
78 this.core = instance;
79 // Override some of lightGallery default settings
80 var defaultSettings = {
81 addClass: this.core.settings.addClass + ' lg-relative-caption',
82 };
83 this.core.settings = __assign(__assign({}, this.core.settings), defaultSettings);
84 // extend module default settings with lightGallery core settings
85 this.settings = __assign(__assign(__assign({}, relativeCaptionSettings), this.core.settings), defaultSettings);
86 return this;
87 }
88 RelativeCaption.prototype.init = function () {
89 var _this = this;
90 if (!this.settings.relativeCaption) {
91 return;
92 }
93 this.core.LGel.on(lGEvents.slideItemLoad + ".caption", function (event) {
94 var _a = event.detail, index = _a.index, delay = _a.delay;
95 setTimeout(function () {
96 if (index === _this.core.index) {
97 _this.setRelativeCaption(index);
98 }
99 }, delay);
100 });
101 this.core.LGel.on(lGEvents.afterSlide + ".caption", function (event) {
102 var index = event.detail.index;
103 setTimeout(function () {
104 var slide = _this.core.getSlideItem(index);
105 if (slide.hasClass('lg-complete')) {
106 _this.setRelativeCaption(index);
107 }
108 });
109 });
110 this.core.LGel.on(lGEvents.beforeSlide + ".caption", function (event) {
111 var index = event.detail.index;
112 setTimeout(function () {
113 var slide = _this.core.getSlideItem(index);
114 slide.removeClass('lg-show-caption');
115 });
116 });
117 this.core.LGel.on(lGEvents.containerResize + ".caption", function (event) {
118 _this.setRelativeCaption(_this.core.index);
119 });
120 };
121 RelativeCaption.prototype.setCaptionStyle = function (index, rect, slideWrapRect) {
122 var $subHtmlInner = this.core
123 .getSlideItem(index)
124 .find('.lg-relative-caption-item');
125 var $subHtml = this.core.getSlideItem(index).find('.lg-sub-html');
126 $subHtml.css('width', rect.width + "px").css('left', rect.left + "px");
127 var subHtmlRect = $subHtmlInner.get().getBoundingClientRect();
128 var bottom = slideWrapRect.bottom - rect.bottom - subHtmlRect.height;
129 $subHtml.css('top', "auto").css('bottom', Math.max(bottom, 0) + "px");
130 };
131 RelativeCaption.prototype.setRelativeCaption = function (index) {
132 var slide = this.core.getSlideItem(index);
133 if (slide.hasClass('lg-current')) {
134 var rect = this.core
135 .getSlideItem(index)
136 .find('.lg-object')
137 .get()
138 .getBoundingClientRect();
139 var slideWrapRect = this.core
140 .getSlideItem(index)
141 .get()
142 .getBoundingClientRect();
143 this.setCaptionStyle(index, rect, slideWrapRect);
144 slide.addClass('lg-show-caption');
145 }
146 };
147 RelativeCaption.prototype.destroy = function () {
148 this.core.LGel.off('.caption');
149 };
150 return RelativeCaption;
151}());
152
153export default RelativeCaption;
154//# sourceMappingURL=lg-relative-caption.es5.js.map