PluginProbe
GutSlider – All in One Slider and Carousel Blocks for Gutenberg / 2.11.0
GutSlider – All in One Slider and Carousel Blocks for Gutenberg v2.11.0
3.1.0 3.0.0 2.13.2 2.13.1 2.13.0 trunk 1.0.0 2.1.0 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.2.1 2.2.2 2.3.0 2.4.0 2.5.1 2.5.3 2.5.4 2.5.5 2.6.1 All 56 releases
slider-blocks / src / blocks / content-slider / save.js

save.js in GutSlider – All in One Slider and Carousel Blocks for Gutenberg 2.11.0, at src/blocks/content-slider/save.js

441 lines 30.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * WordPress dependencies
3 */
4 import { RichText, useBlockProps } from '@wordpress/block-editor';
5 import { Fragment, RawHTML } from '@wordpress/element';
6 import classnames from 'classnames';
7
8 const { DisplayIcon, DynamicTag } = window?.gutSliderModules;
9
10 /**
11 * Save function
12 */
13
14 export default function save({ attributes }) {
15 const {
16 uniqueId,
17 //visible elements
18 showImage,
19 showSubTitle,
20 showTitle,
21 showDescription,
22 showButton,
23 sliderType,
24 slideItems,
25 sliderOptions,
26 titleTag,
27 subtitleTag,
28 descriptionTag,
29 titleAnimation,
30 subtitleAnimation,
31 descAnimation,
32 btnAnimation,
33 sbtnAnimation,
34 showPagination,
35 showNavigation,
36 navContainerPosition,
37 navPosition,
38 customNavIcon,
39 navIconSource,
40 navPrevIcon,
41 navNextIcon,
42 customPrevSVG,
43 customNextSVG,
44 // global link
45 enableGlobalLink,
46 // remote navigation
47 enableRemoteNav,
48 remotePrevSelector,
49 remoteNextSelector
50 } = attributes;
51
52 // Block Props
53 const blockProps = useBlockProps.save({
54 className: classnames(uniqueId, navContainerPosition, navPosition)
55 });
56
57 return (
58 <div
59 {...blockProps}
60 data-swiper-options={JSON.stringify(sliderOptions)}
61 {...(enableRemoteNav && {
62 'data-rprev': remotePrevSelector,
63 'data-rnext': remoteNextSelector
64 })}
65 >
66 <div className="swiper">
67 <div className="swiper-wrapper">
68 {slideItems &&
69 slideItems.map((slide, index) => {
70 const bgStyles = {
71 backgroundColor: slide.bgColor ? slide.bgColor : '',
72 ...(slide.bgType !== 'video' &&
73 !slide.enableResponsiveBg && {
74 backgroundImage: slide.bgType === 'classic' ? `url(${slide.image.url})` : slide.bgGradient
75 }),
76 ...(slide.bgType !== 'video' &&
77 slide.enableResponsiveBg &&
78 slide.bgType === 'classic' && {
79 [`--gut-desktop-bg-image`]: `url(${slide.DesktopBg?.url})`,
80 [`--gut-tablet-bg-image`]: `url(${slide.TabletBg?.url})`,
81 [`--gut-mobile-bg-image`]: `url(${slide.MobileBg?.url})`
82 }),
83
84 ...(slide.enableResponsiveBg &&
85 slide.bgType === 'classic' &&
86 slide?.DesktopBg?.url &&
87 slide?.DesktopFocalPoint && {
88 [`--gut-desktop-focal-point`]: `${slide?.DesktopFocalPoint?.x * 100}% ${slide?.DesktopFocalPoint?.y * 100}%`
89 }),
90
91 ...(slide.enableResponsiveBg &&
92 slide.bgType === 'classic' &&
93 slide?.TabletBg?.url &&
94 slide?.TabletFocalPoint && {
95 [`--gut-tablet-focal-point`]: `${slide?.TabletFocalPoint?.x * 100}% ${slide?.TabletFocalPoint?.y * 100}%`
96 }),
97
98 ...(slide.enableResponsiveBg &&
99 slide.bgType === 'classic' &&
100 slide?.MobileBg?.url &&
101 slide?.MobileFocalPoint && {
102 [`--gut-mobile-focal-point`]: `${slide?.MobileFocalPoint?.x * 100}% ${slide?.MobileFocalPoint?.y * 100}%`
103 }),
104 ...(slide?.focusPoint &&
105 slide.bgType !== 'video' &&
106 !slide.enableResponsiveBg && {
107 backgroundPosition: `${slide?.focusPoint?.x * 100}% ${slide?.focusPoint?.y * 100}%`
108 })
109 };
110 const overlayStyles = {
111 background: slide.overlayType === 'classic' ? slide.overlayColor : slide.overlayGradient,
112 opacity: slide.overlayOpacity ? slide.overlayOpacity : ''
113 };
114 return (
115 <div
116 className={classnames('swiper-slide', {
117 'slide-mode': sliderType === 'slider'
118 })}
119 key={index}
120 >
121 <DynamicTag
122 tagName={enableGlobalLink ? 'a' : 'div'}
123 {...(enableGlobalLink && {
124 ...(slide.globalLink?.url && {
125 href: slide.globalLink.url
126 }),
127 ...(slide.globalLink?.openInNewTab && {
128 target: '_blank',
129 rel: [
130 slide.globalLink.addNoFollow && 'nofollow',
131 slide.globalLink.addSponsored && 'sponsored',
132 slide.globalLink.openInNewTab && 'noopener noreferrer'
133 ]
134 .filter(Boolean)
135 .join(' ')
136 })
137 })}
138 className={classnames('swiper-container-outer', {
139 'responsive-image': slide.enableResponsiveBg
140 })}
141 style={bgStyles}
142 >
143 {slide.bgType === 'video' && slide.bgVideo?.url && (
144 <div className="gutslider-video-wrapper">
145 <video className="gutslider-video" autoPlay loop muted playsInline preload="metadata">
146 <source src={slide.bgVideo?.url} type="video/mp4" />
147 </video>
148 </div>
149 )}
150 {slide.enableOverlay && (slide.bgType === 'classic' || slide.bgType === 'video') && (
151 <div className="gutslider-overlay" style={overlayStyles}></div>
152 )}
153 <div className="gutslider-content-wrapper">
154 {showImage ? (
155 <div className="gutslider-content-inner">
156 <div className="gutslider-content-position">
157 {slide.photo && slide.photo.url ? (
158 <div className="gutslider-content-image">
159 <img
160 src={slide.photo.sizes[slide.photoSize].url}
161 alt={slide.photo.alt}
162 className={classnames(`wp-image-${slide.photo.id}`)}
163 />
164 </div>
165 ) : null}
166 <div className="guslider-content">
167 {showSubTitle && slide.subtitle && (
168 <RichText.Content
169 tagName={subtitleTag}
170 value={slide.subtitle}
171 className={`gutslider-subtitle ${
172 subtitleAnimation && subtitleAnimation
173 }`}
174 />
175 )}
176 {showTitle && slide.title && (
177 <RichText.Content
178 tagName={titleTag}
179 value={slide.title}
180 className={`gutslider-title ${titleAnimation && titleAnimation}`}
181 />
182 )}
183 {showDescription && slide.description && (
184 <RichText.Content
185 tagName={descriptionTag}
186 value={slide.description}
187 className={`gutslider-description ${descAnimation && descAnimation}`}
188 />
189 )}
190 </div>
191 </div>
192 {slide.btnLabel && slide.btnLinks && slide.btnLinks.url && (
193 <DynamicTag
194 tagName={enableGlobalLink ? 'span' : 'a'}
195 className={classnames(`gutslider-cta ${btnAnimation && btnAnimation}`)}
196 {...(!enableGlobalLink && {
197 href: slide.btnLinks && slide.btnLinks.url,
198 target: slide.btnLinks.openInNewTab && '_blank'
199 })}
200 {...(slide.btnLinks &&
201 !enableGlobalLink &&
202 (slide.btnLinks.openInNewTab ||
203 slide.btnLinks.addNoFollow ||
204 slide.btnLinks.addSponsored) && {
205 rel: [
206 slide.btnLinks.openInNewTab && 'noopener noreferrer',
207 slide.btnLinks.addNoFollow && 'nofollow',
208 slide.btnLinks.addSponsored && 'sponsored'
209 ]
210 .filter(Boolean)
211 .join(' ')
212 })}
213 >
214 {slide.btnLabel}
215 </DynamicTag>
216 )}
217 {showButton && slide?.showSbtnLinks ? (
218 <div className="gutslider-btn-flex">
219 {slide.sbtnLabel && slide.sbtnLinks && slide.sbtnLinks.url && (
220 <DynamicTag
221 tagName={enableGlobalLink ? 'span' : 'a'}
222 className={classnames(
223 `gutslider-cta-secondary ${sbtnAnimation && sbtnAnimation}`
224 )}
225 {...(!enableGlobalLink && {
226 href: slide.sbtnLinks && slide.sbtnLinks.url,
227 target: slide.sbtnLinks.openInNewTab && '_blank'
228 })}
229 {...(slide.sbtnLinks &&
230 !enableGlobalLink &&
231 (slide.sbtnLinks.openInNewTab ||
232 slide.sbtnLinks.addNoFollow ||
233 slide.sbtnLinks.addSponsored) && {
234 rel: [
235 slide.sbtnLinks.openInNewTab && 'noopener noreferrer',
236 slide.sbtnLinks.addNoFollow && 'nofollow',
237 slide.sbtnLinks.addSponsored && 'sponsored'
238 ]
239 .filter(Boolean)
240 .join(' ')
241 })}
242 >
243 {slide.sbtnLabel}
244 </DynamicTag>
245 )}
246 </div>
247 ) : (
248 slide.btnLabel &&
249 slide.btnLinks &&
250 slide.btnLinks.url && (
251 <DynamicTag
252 tagName={enableGlobalLink ? 'span' : 'a'}
253 className={classnames(`gutslider-cta ${btnAnimation && btnAnimation}`)}
254 {...(!enableGlobalLink && {
255 href: slide.btnLinks && slide.btnLinks.url,
256 target: slide.btnLinks && slide.btnLinks.openInNewTab && '_blank'
257 })}
258 {...(slide.btnLinks &&
259 !enableGlobalLink &&
260 (slide.btnLinks.openInNewTab ||
261 slide.btnLinks.addNoFollow ||
262 slide.btnLinks.addSponsored) && {
263 rel: [
264 slide.btnLinks.openInNewTab && 'noopener noreferrer',
265 slide.btnLinks.addNoFollow && 'nofollow',
266 slide.btnLinks.addSponsored && 'sponsored'
267 ]
268 .filter(Boolean)
269 .join(' ')
270 })}
271 >
272 {slide.btnLabel}
273 </DynamicTag>
274 )
275 )}
276 </div>
277 ) : (
278 <div className="gutslider-content-inner">
279 {showSubTitle && slide.subtitle && (
280 <RichText.Content
281 tagName={subtitleTag}
282 value={slide.subtitle}
283 className={`gutslider-subtitle ${subtitleAnimation && subtitleAnimation}`}
284 />
285 )}
286 {showTitle && slide.title && (
287 <RichText.Content
288 tagName={titleTag}
289 value={slide.title}
290 className={`gutslider-title ${titleAnimation && titleAnimation}`}
291 />
292 )}
293 {showDescription && slide.description && (
294 <RichText.Content
295 tagName={descriptionTag}
296 value={slide.description}
297 className={`gutslider-description ${descAnimation && descAnimation}`}
298 />
299 )}
300 {showButton && slide?.showSbtnLinks ? (
301 <div className="gutslider-btn-flex">
302 {slide.btnLabel && slide.btnLinks && slide.btnLinks.url && (
303 <DynamicTag
304 tagName={enableGlobalLink ? 'span' : 'a'}
305 className={classnames(`gutslider-cta ${btnAnimation && btnAnimation}`)}
306 {...(!enableGlobalLink && {
307 href: slide.btnLinks && slide.btnLinks.url,
308 target: slide.btnLinks.openInNewTab && '_blank'
309 })}
310 {...(slide.btnLinks &&
311 (slide.btnLinks.openInNewTab ||
312 slide.btnLinks.addNoFollow ||
313 slide.btnLinks.addSponsored) && {
314 rel: [
315 slide.btnLinks.openInNewTab && 'noopener noreferrer',
316 slide.btnLinks.addNoFollow && 'nofollow',
317 slide.btnLinks.addSponsored && 'sponsored'
318 ]
319 .filter(Boolean)
320 .join(' ')
321 })}
322 >
323 {slide.btnLabel}
324 </DynamicTag>
325 )}
326 {slide.sbtnLabel && slide.sbtnLinks && slide.sbtnLinks.url && (
327 <DynamicTag
328 tagName={enableGlobalLink ? 'span' : 'a'}
329 className={classnames(
330 `gutslider-cta-secondary ${sbtnAnimation && sbtnAnimation}`
331 )}
332 {...(!enableGlobalLink && {
333 href: slide.sbtnLinks && slide.sbtnLinks.url,
334 target: slide.sbtnLinks.openInNewTab && '_blank'
335 })}
336 {...(slide.sbtnLinks &&
337 (slide.sbtnLinks.openInNewTab ||
338 slide.sbtnLinks.addNoFollow ||
339 slide.sbtnLinks.addSponsored) && {
340 rel: [
341 slide.sbtnLinks.openInNewTab && 'noopener noreferrer',
342 slide.sbtnLinks.addNoFollow && 'nofollow',
343 slide.sbtnLinks.addSponsored && 'sponsored'
344 ]
345 .filter(Boolean)
346 .join(' ')
347 })}
348 >
349 {slide.sbtnLabel}
350 </DynamicTag>
351 )}
352 </div>
353 ) : (
354 showButton &&
355 slide.btnLabel &&
356 slide.btnLinks &&
357 slide.btnLinks.url && (
358 <DynamicTag
359 tagName={enableGlobalLink ? 'span' : 'a'}
360 className={classnames(`gutslider-cta ${btnAnimation && btnAnimation}`)}
361 {...(!enableGlobalLink && {
362 href: slide.btnLinks && slide.btnLinks.url,
363 target: slide.btnLinks.openInNewTab && '_blank'
364 })}
365 {...(slide.btnLinks &&
366 (slide.btnLinks.openInNewTab ||
367 slide.btnLinks.addNoFollow ||
368 slide.btnLinks.addSponsored) && {
369 rel: [
370 slide.btnLinks.openInNewTab && 'noopener noreferrer',
371 slide.btnLinks.addNoFollow && 'nofollow',
372 slide.btnLinks.addSponsored && 'sponsored'
373 ]
374 .filter(Boolean)
375 .join(' ')
376 })}
377 >
378 {slide.btnLabel}
379 </DynamicTag>
380 )
381 )}
382 </div>
383 )}
384 </div>
385 </DynamicTag>
386 </div>
387 );
388 })}
389 </div>
390 {showNavigation && navContainerPosition === 'nav_inside' && !enableRemoteNav && (
391 <Fragment>
392 <div className={`gutslider-nav nav_inside ${navPosition}`}>
393 {customNavIcon ? (
394 <Fragment>
395 <div className="gutslider-prev">
396 {navIconSource === 'library' && <DisplayIcon icon={navPrevIcon} />}
397 {navIconSource === 'custom' && <RawHTML>{customPrevSVG}</RawHTML>}
398 </div>
399 <div className="gutslider-next">
400 {navIconSource === 'library' && <DisplayIcon icon={navNextIcon} />}
401 {navIconSource === 'custom' && <RawHTML>{customNextSVG}</RawHTML>}
402 </div>
403 </Fragment>
404 ) : (
405 <Fragment>
406 <div className="swiper-button-prev"></div>
407 <div className="swiper-button-next"></div>
408 </Fragment>
409 )}
410 </div>
411 </Fragment>
412 )}
413 {showPagination && <div className="swiper-pagination"></div>}
414 </div>
415 {showNavigation && navContainerPosition === 'nav_outside' && !enableRemoteNav && (
416 <Fragment>
417 <div className={`gutslider-nav nav_outside ${navPosition}`}>
418 {customNavIcon ? (
419 <Fragment>
420 <div className="gutslider-prev">
421 {navIconSource === 'library' && <DisplayIcon icon={navPrevIcon} />}
422 {navIconSource === 'custom' && <RawHTML>{customPrevSVG}</RawHTML>}
423 </div>
424 <div className="gutslider-next">
425 {navIconSource === 'library' && <DisplayIcon icon={navNextIcon} />}
426 {navIconSource === 'custom' && <RawHTML>{customNextSVG}</RawHTML>}
427 </div>
428 </Fragment>
429 ) : (
430 <Fragment>
431 <div className="swiper-button-prev"></div>
432 <div className="swiper-button-next"></div>
433 </Fragment>
434 )}
435 </div>
436 </Fragment>
437 )}
438 </div>
439 );
440 }
441