PageSourceSearch

https://volpaia.com/wp-content/plugins/jet-engine/assets/js/frontend.js?ver=2.4.3

js volpaia.com collected 2026-09-24 23:21:57 UTC 25,606 bytes, 1,057 lines download raw bytes

1( function( $ ) {
2
3	"use strict";
4
5	var JetEngine = {
6
7		currentMonth: null,
8		currentRequest: {},
9		stores: {},
10		registeredStores: {},
11		activeCalendarDay: null,
12
13		init: function() {
14
15			var widgets = {
16				'jet-listing-dynamic-field.default' : JetEngine.widgetDynamicField,
17				'jet-listing-grid.default': JetEngine.widgetListingGrid,
18			};
19
20			$.each( widgets, function( widget, callback ) {
21				window.elementorFrontend.hooks.addAction( 'frontend/element_ready/' + widget, callback );
22			});
23
24			$( document )
25				.on( 'click.JetEngine', '.jet-calendar-nav__link', JetEngine.switchCalendarMonth )
26				.on( 'click.JetEngine', '.jet-calendar-week__day-mobile-overlay', JetEngine.showCalendarEvent )
27				.on( 'click.JetEngine', '.jet-listing-dynamic-link__link[data-delete-link="1"]', JetEngine.showConfirmDeleteDialog )
28				.on( 'jet-filter-content-rendered', JetEngine.maybeReinitSlider )
29				.on( 'click.JetEngine', '.jet-add-to-store', JetEngine.addToStore )
30				.on( 'click.JetEngine', '.jet-remove-from-store', JetEngine.removeFromStore )
31				.on( 'click.JetEngine', '.jet-engine-listing-overlay-wrap', JetEngine.handleListingItemClick );
32
33			$( window ).on( 'jet-popup/render-content/ajax/success', JetEngine.initStores );
34
35			JetEngine.initStores();
36
37			window.elementorFrontend.hooks.addFilter(
38				'jet-popup/widget-extensions/popup-data',
39				JetEngine.prepareJetPopup
40			);
41
42			JetEngine.customUrlActions.init();
43
44		},
45
46		initStores: function() {
47
48			$( '.jet-add-to-store.is-front-store' ).each( function() {
49
50				var $this = $( this ),
51					args  = $this.data( 'args' ),
52					store = JetEngine.stores[ args.store.type ],
53					count = 0;
54
55				if ( ! store ) {
56					return;
57				}
58
59				if ( store.inStore( args.store.slug, '' + args.post_id ) ) {
60					JetEngine.switchDataStoreStatus( $this );
61				}
62
63			} );
64
65			$( '.jet-remove-from-store.is-front-store' ).each( function() {
66
67				var $this = $( this ),
68					args  = $this.data( 'args' ),
69					store = JetEngine.stores[ args.store.type ],
70					count = 0;
71
72				if ( ! store ) {
73					return;
74				}
75
76				if ( ! store.inStore( args.store.slug, '' + args.post_id ) ) {
77					$this.addClass( 'is-hidden' );
78				} else {
79					$this.removeClass( 'is-hidden' );
80				}
81
82			} );
83
84			$.each( JetEngine.registeredStores, function( storeSlug, storeType ) {
85
86				var store = JetEngine.stores[ storeType ],
87					storeData = null,
88					count = 0;
89
90				if ( ! store ) {
91					return;
92				}
93
94				storeData = store.getStore( storeSlug );
95
96				if ( storeData && storeData.length ) {
97					count = storeData.length;
98				}
99
100				$( 'span.jet-engine-data-store-count[data-store="' + storeSlug + '"]' ).text( count );
101
102			} );
103
104			$( '.jet-listing-not-found.jet-listing-grid__items' ).each( function() {
105
106				var $this = $( this ),
107					nav   = $this.data( 'nav' ),
108					query = nav.query;
109
110				if ( query.post__in && query.post__in.length && 0 >= query.post__in.indexOf( 'is-front' ) ) {
111
112					var storeType  = query.post__in[1],
113						storeSlug  = query.post__in[2],
114						store      = JetEngine.stores[ storeType ],
115						posts      = [],
116						$container = $this.closest( '.elementor-widget-container' );
117
118					if ( ! store ) {
119						return;
120					}
121
122					posts = store.getStore( storeSlug );
123
124					if ( ! posts.length ) {
125						return;
126					}
127
128					query.post__in = posts;
129
130					JetEngine.ajaxGetListing( {
131						handler: 'get_listing',
132						container: $container,
133						masonry: false,
134						slider: false,
135						append: false,
136						query: query,
137						widgetSettings: nav.widget_settings,
138					}, function( response ) {
139						JetEngine.widgetListingGrid( $container );
140					} );
141
142				}
143
144			} );
145
146		},
147
148		removeFromStore: function( event ) {
149
150			event.preventDefault();
151
152			var $this = $( this ),
153				args  = $this.data( 'args' );
154
155			if ( args.store.is_front ) {
156
157				var store = JetEngine.stores[ args.store.type ],
158					count = 0;
159
160				if ( ! store ) {
161					return;
162				}
163
164				if ( ! store.inStore( args.store.slug, '' + args.post_id ) ) {
165					var storePosts = store.getStore( args.store.slug );
166					count = storePosts.length;
167				} else {
168					count = store.remove( args.store.slug, args.post_id );
169				}
170
171				$( '.jet-add-to-store[data-store="' + args.store.slug + '"][data-post="' + args.post_id + '"]' ).each( function() {
172					JetEngine.switchDataStoreStatus( $( this ), true );
173				} );
174
175				$( 'span.jet-engine-data-store-count[data-store="' + args.store.slug + '"]' ).text( count );
176
177				if ( args.remove_from_listing ) {
178					$this.closest( '.jet-listing-dynamic-post-' + args.post_id ).remove();
179				}
180
181				return;
182
183			}
184
185			$this.css( 'opacity', 0.3 );
186
187			$.ajax({
188				url: JetEngineSettings.ajaxurl,
189				type: 'POST',
190				dataType: 'json',
191				data: {
192					action: 'jet_engine_remove_from_store_' + args.store.slug,
193					store: args.store.slug,
194					post_id: args.post_id,
195				},
196			}).done( function( response ) {
197
198				$this.css( 'opacity', 1 );
199
200				if ( response.success ) {
201
202					$this.addClass( 'is-hidden' );
203
204					$( '.jet-add-to-store[data-store="' + args.store.slug + '"][data-post="' + args.post_id + '"]' ).each( function() {
205						JetEngine.switchDataStoreStatus( $( this ), true );
206					} );
207
208					if ( args.remove_from_listing ) {
209						$this.closest( '.jet-listing-grid__item[data-post="' + args.post_id + '"]' ).remove();
210					}
211
212					if ( response.data.fragments ) {
213						$.each( response.data.fragments, function( selector, value ) {
214							$( selector ).html( value );
215						} );
216					}
217
218				} else {
219					alert( response.data.message );
220				}
221
222				return response;
223
224			} ).done( function( response ) {
225
226				if ( args.remove_from_listing ) {
227					$this.closest( '.jet-listing-grid__item' ).remove();
228				}
229
230				if ( response.success ) {
231					$( 'span.jet-engine-data-store-count[data-store="' + args.store.slug + '"]' ).text( response.data.count );
232				}
233
234			} ).fail( function( jqXHR, textStatus, errorThrown ) {
235				$this.css( 'opacity', 1 );
236				alert( errorThrown );
237			} );
238
239		},
240
241		triggerPopup: function( popupID, isJetEngine, postID ) {
242
243			if ( ! popupID ) {
244				return;
245			}
246
247			var popupData = {
248				popupId: 'jet-popup-' + popupID,
249			};
250
251			if ( isJetEngine ) {
252				popupData.isJetEngine = true;
253				popupData.postId      = postID;
254			}
255
256			$( window ).trigger( {
257				type: 'jet-popup-open-trigger',
258				popupData: popupData
259			} );
260
261		},
262
263		addToStore: function( event ) {
264
265			event.preventDefault();
266
267			var $this = $( this ),
268				args  = $this.data( 'args' );
269
270			if ( $this.hasClass( 'in-store' ) ) {
271				if ( args.popup ) {
272					JetEngine.triggerPopup( args.popup, args.isJetEngine, args.post_id );
273				} else {
274					window.location = $this.attr( 'href' );
275				}
276				return;
277			}
278
279			if ( args.store.is_front ) {
280
281				var store = JetEngine.stores[ args.store.type ],
282					count = 0;
283
284				if ( ! store ) {
285					return;
286				}
287
288				if ( store.inStore( args.store.slug, '' + args.post_id ) ) {
289					var storePosts = store.getStore( args.store.slug );
290					count = storePosts.length;
291				} else {
292
293					count = store.addToStore( args.store.slug, args.post_id, args.store.size );
294
295					if ( false === count ) {
296						return;
297					}
298
299				}
300
301				if ( args.popup ) {
302					JetEngine.triggerPopup( args.popup, args.isJetEngine, args.post_id );
303				}
304
305				JetEngine.switchDataStoreStatus( $this );
306				$( 'span.jet-engine-data-store-count[data-store="' + args.store.slug + '"]' ).text( count );
307				$( '.jet-remove-from-store[data-store="' + args.store.slug + '"][data-post="' + args.post_id + '"]' ).removeClass( 'is-hidden' );
308
309				return;
310			}
311
312			$this.css( 'opacity', 0.3 );
313
314			$.ajax({
315				url: JetEngineSettings.ajaxurl,
316				type: 'POST',
317				dataType: 'json',
318				data: {
319					action: 'jet_engine_add_to_store_' + args.store.slug,
320					store: args.store.slug,
321					post_id: args.post_id,
322				},
323			}).done( function( response ) {
324
325				$this.css( 'opacity', 1 );
326
327				if ( response.success ) {
328
329					JetEngine.switchDataStoreStatus( $this );
330					$( '.jet-remove-from-store[data-store="' + args.store.slug + '"][data-post="' + args.post_id + '"]' ).removeClass( 'is-hidden' );
331
332					if ( response.data.fragments ) {
333						$.each( response.data.fragments, function( selector, value ) {
334							$( selector ).html( value );
335						} );
336					}
337
338					if ( args.synch_id ) {
339
340						var $container = $( '#' + args.synch_id ),
341							$items     = $container.find( '.jet-listing-grid__items' ),
342							nav        = $items.data( 'nav' ),
343							query      = nav.query;
344
345						JetEngine.ajaxGetListing( {
346							handler: 'get_listing',
347							container: $container,
348							masonry: false,
349							slider: false,
350							append: false,
351							query: query,
352							widgetSettings: nav.widget_settings,
353							postID: window.elementorFrontendConfig.post.id,
354							elementID: $container.data( 'id' ),
355						}, function( response ) {
356							JetEngine.widgetListingGrid( $container );
357						} );
358
359					}
360
361					if ( args.popup ) {
362						JetEngine.triggerPopup( args.popup, args.isJetEngine, args.post_id );
363					}
364
365				} else {
366					alert( response.data.message );
367				}
368
369				return response;
370
371			} ).done( function( response ) {
372
373				if ( response.success ) {
374					$( 'span.jet-engine-data-store-count[data-store="' + args.store.slug + '"]' ).text( response.data.count );
375				}
376
377			} ).fail( function( jqXHR, textStatus, errorThrown ) {
378				$this.css( 'opacity', 1 );
379				alert( errorThrown );
380			} );
381
382		},
383
384		switchDataStoreStatus: function( $item, toInitial ) {
385
386			var $label = $item.find( '.jet-listing-dynamic-link__label' ),
387				$icon  = $item.find( '.jet-listing-dynamic-link__icon' ),
388				args   = $item.data( 'args' ),
389				replaceLabel,
390				replaceURL,
391				replaceIcon;
392
393			toInitial = toInitial || false;
394
395			if ( toInitial ) {
396				replaceLabel = args.label;
397				replaceIcon  = args.icon;
398				replaceURL   = '#';
399			} else {
400				replaceLabel = args.added_label;
401				replaceIcon  = args.added_icon;
402				replaceURL   = args.added_url;
403			}
404
405			if ( $label.length ) {
406				$label.replaceWith( replaceLabel );
407			} else {
408				$item.append( replaceLabel );
409			}
410
411			if ( $icon.length ) {
412				$icon.replaceWith( replaceIcon );
413			} else {
414				$item.prepend( replaceIcon );
415			}
416
417			$item.attr( 'href', replaceURL );
418
419			if ( toInitial ) {
420				$item.removeClass( 'in-store' );
421			} else if ( ! $item.hasClass( 'in-store' ) ) {
422				$item.addClass( 'in-store' );
423			}
424
425
426		},
427
428		showConfirmDeleteDialog: function( event ) {
429			event.preventDefault();
430
431			var $this = $( this );
432
433			if ( window.confirm( $this.data( 'delete-message' ) ) ) {
434				window.location = $this.attr( 'href' );
435			}
436
437		},
438
439		handleListingItemClick: function( event ) {
440
441			var url    = $( this ).data( 'url' ),
442				target = $( this ).data( 'target' ) || false;
443
444			if ( url ) {
445
446				event.preventDefault();
447
448				if ( window.elementorFrontend && window.elementorFrontend.isEditMode() ) {
449					return;
450				}
451
452				if ( -1 !== url.indexOf( 'action=open_map_listing_popup' ) ) {
453
454					JetEngine.customUrlActions.runAction( url );
455
456				} else {
457
458					if ( '_blank' === target ) {
459						window.open( url );
460						return;
461					}
462
463					window.location = url;
464				}
465			}
466
467		},
468
469		customUrlActions: {
470			selector: 'a[href^="#jet-engine-action"]',
471
472			init: function() {
473				$( document ).on( 'click.JetEngine', this.selector, this.actionHandler.bind( this ) );
474			},
475
476			actions: {
477				'open_map_listing_popup': function( settings ) {
478
479					if ( ! window.google || ! window.JetEngineMaps ) {
480						return;
481					}
482
483					if ( ! settings.id ) {
484						return;
485					}
486
487					var popupID = settings.id;
488
489					if ( undefined === JetEngineMaps.markersData[ popupID ] ) {
490						return;
491					}
492
493					for ( var i = 0; i < JetEngineMaps.markersData[ popupID ].length; i++ ) {
494
495						var marker = JetEngineMaps.markersData[ popupID ][i].marker,
496							map = marker.getMap();
497
498						if ( !map ) {
499							// A marker inside a cluster
500							var clustererIndex = JetEngineMaps.markersData[ popupID ][i].clustererIndex,
501								markersClusterer = JetEngineMaps.clusterersData[ clustererIndex ],
502								cluster = JetEngineMaps.findClusterByMarker( markersClusterer, marker ),
503								clusterMarkers,
504								bounds;
505
506							if ( !cluster ) {
507								return;
508							}
509
510							clusterMarkers = cluster.getMarkers();
511							bounds = new google.maps.LatLngBounds();
512
513							map = markersClusterer.getMap();
514
515							for ( var j = 0; j < clusterMarkers.length; j++ ) {
516								bounds.extend( clusterMarkers[j].position );
517							}
518
519							map.fitBounds( bounds );
520						}
521
522						google.maps.event.trigger( marker, 'click' );
523					}
524				}
525			},
526
527			actionHandler: function( event ) {
528				event.preventDefault();
529
530				var url = $( event.currentTarget ).attr( 'href' );
531
532				this.runAction( url );
533			},
534
535			runAction: function( url ) {
536				var queryParts = url.split( '&' ),
537					settings = {};
538
539				queryParts.forEach( function( item ) {
540					if ( -1 !== item.indexOf( '=' ) ) {
541						var pair = item.split( '=' );
542
543						settings[ pair[0] ] = decodeURIComponent( pair[1] );
544					}
545				} );
546
547				if ( ! settings.action ) {
548					return;
549				}
550
551				var actionCb = this.actions[ settings.action ];
552
553				if ( ! actionCb ) {
554					return;
555				}
556
557				actionCb( settings );
558			}
559		},
560
561		prepareJetPopup: function( popupData, widgetData, $scope ) {
562
563			var postId = null;
564
565			if ( widgetData['is-jet-engine'] ) {
566				popupData['isJetEngine'] = true;
567
568				var $gridItems    = $scope.closest( '.jet-listing-grid__items' ),
569					$gridItem     = $scope.closest( '.jet-listing-grid__item' ),
570					$calendarItem = $scope.closest( '.jet-calendar-week__day-event' );
571
572				if ( $gridItems.length ) {
573					popupData['listingSource'] = $gridItems.data( 'listing-source' );
574				}
575
576				if ( $gridItem.length ) {
577					popupData['postId'] = $gridItem.data( 'post-id' );
578				} else if ( $calendarItem.length ) {
579					popupData['postId'] = $calendarItem.data( 'post-id' );
580				} else if ( window.elementorFrontendConfig && window.elementorFrontendConfig.post ) {
581					popupData['postId'] = window.elementorFrontendConfig.post.id;
582				}
583
584				if ( window.JetEngineFormsEditor && window.JetEngineFormsEditor.hasEditor ) {
585					popupData['hasEditor'] = true;
586				}
587
588			}
589
590			return popupData;
591
592		},
593
594		showCalendarEvent: function( event ) {
595
596			var $this       = $( this ),
597				$day        = $this.closest( '.jet-calendar-week__day' ),
598				$week       = $day.closest( '.jet-calendar-week' ),
599				$events     = $day.find( '.jet-calendar-week__day-content' ),
600				activeClass = 'calendar-event-active';
601
602			if ( $day.hasClass( activeClass ) ) {
603				$day.removeClass( activeClass );
604				JetEngine.activeCalendarDay.remove();
605				JetEngine.activeCalendarDay = null;
606				return;
607			}
608
609			if ( JetEngine.activeCalendarDay ) {
610				JetEngine.activeCalendarDay.remove();
611				$( '.' + activeClass ).removeClass( activeClass );
612				JetEngine.activeCalendarDay = null;
613			}
614
615			$day.addClass( 'calendar-event-active' );
616
617			JetEngine.activeCalendarDay = $( '<tr class="jet-calendar-week"><td colspan="7" class="jet-calendar-week__day jet-calendar-week__day-mobile"><div class="jet-calendar-week__day-mobile-event">' + $events.html() + '</div></td></tr>' );
618
619			JetEngine.activeCalendarDay.insertAfter( $week );
620
621		},
622
623		widgetListingGrid: function( $scope ) {
624			var $listing    = $scope.find( '.jet-listing-grid__items' ).first(),
625				$slider     = $listing.parent( '.jet-listing-grid__slider' ),
626				$masonry    = $listing.hasClass( 'jet-listing-grid__masonry' ) ? $listing : false,
627				navSettings = $listing.data( 'nav' ),
628				masonryGrid = false;
629
630			if ( $slider.length ) {
631				JetEngine.initSlider( $slider );
632			}
633
634			if ( $masonry && $masonry.length ) {
635
636				JetEngine.initMasonry( $masonry );
637
638				$( window ).on( 'load resize', function() {
639					JetEngine.runMasonry( $masonry );
640				} );
641			}
642
643			if ( navSettings && navSettings.enabled ) {
644
645				var $button = $( navSettings.more_el ),
646					page    = parseInt( $listing.data( 'page' ), 10 ),
647					pages   = parseInt( $listing.data( 'pages' ), 10 );
648
649				if ( $button.length ) {
650
651					if ( page === pages && ! window.elementor ) {
652						$button.css( 'display', 'none' );
653					} else {
654						$button.removeAttr( 'style' );
655					}
656
657					$( document ).off( 'click', navSettings.more_el ).on( 'click', navSettings.more_el, JetEngine.handleMore.bind( {
658						container: $listing,
659						button: $button,
660						settings: navSettings,
661						pages: pages,
662						masonry: $masonry,
663						slider: $slider,
664					} ) );
665
666				}
667			}
668
669		},
670
671		initMasonry: function( $masonry ) {
672			imagesLoaded( $masonry, function() {
673				JetEngine.runMasonry( $masonry );
674			} );
675		},
676
677		runMasonry: function( $masonry ) {
678			var $items  = $( '> .jet-listing-grid__item', $masonry ),
679				options = $masonry.data( 'masonry-grid-options' ),
680				deviceMode = window.elementorFrontend.getCurrentDeviceMode(),
681				columnsCount = options.columns[ deviceMode ];
682
683			// Reset masonry
684			$items.css( {
685				marginTop: ''
686			} );
687
688			if ( columnsCount < 2 ) {
689				return;
690			}
691
692			var masonryInstance = new window.elementorModules.utils.Masonry( {
693					container: $masonry,
694					items: $items,
695					columnsCount: columnsCount,
696					verticalSpaceBetween: 0
697				} );
698
699			masonryInstance.run();
700		},
701
702		ajaxGetListing: function( options, doneCallback, failCallback ) {
703
704			var container = options.container || false,
705				handler = options.handler || false,
706				masonry = options.masonry || false,
707				slider = options.slider || false,
708				append = options.append || false,
709				query = options.query || {},
710				widgetSettings = options.widgetSettings || {},
711				postID = options.postID || false,
712				elementID = options.elementID || false,
713				page = options.page || 1;
714
715			doneCallback = doneCallback || function( response ) {};
716
717			if ( ! container|| ! handler ) {
718				return;
719			}
720
721			container.css({
722				pointerEvents: 'none',
723				opacity: '0.5',
724				cursor: 'default',
725			});
726
727			$.ajax({
728				url: JetEngineSettings.ajaxurl,
729				type: 'POST',
730				dataType: 'json',
731				data: {
732					action: 'jet_engine_ajax',
733					handler: handler,
734					query: query,
735					widget_settings: widgetSettings,
736					post_id: postID,
737					element_id: elementID,
738					page: page
739				},
740			}).done( function( response ) {
741
742				container.removeAttr( 'style' );
743
744				if ( response.success ) {
745
746					container.data( 'page', page );
747
748					var $html = $( response.data.html );
749
750					$html.find( '[data-element_type]' ).each( function() {
751						var $this       = $( this ),
752							elementType = $this.data( 'element_type' );
753
754						if( 'widget' === elementType ){
755							elementType = $this.data( 'widget_type' );
756							window.elementorFrontend.hooks.doAction( 'frontend/element_ready/widget', $this, $ );
757						}
758
759						window.elementorFrontend.hooks.doAction( 'frontend/element_ready/global', $this, $ );
760						window.elementorFrontend.hooks.doAction( 'frontend/element_ready/' + elementType, $this, $ );
761
762					});
763
764					if ( slider && slider.length ) {
765
766						var $slider = slider.find( '> .jet-listing-grid__items' );
767
768						if ( ! $slider.hasClass( 'slick-initialized' ) ) {
769
770							if ( append ) {
771								container.append( $html );
772							} else {
773								container.html( $html );
774							}
775
776							var itemsCount = container.find( '> .jet-listing-grid__item' ).length;
777
778							slider.addClass( 'jet-listing-grid__slider' );
779							JetEngine.initSlider( slider, { itemsCount: itemsCount } );
780
781						} else {
782							$html.each( function( index, el ) {
783								$slider.slick( 'slickAdd', el );
784							});
785						}
786
787					} else {
788
789						if ( append ) {
790							container.append( $html );
791						} else {
792							container.html( $html );
793						}
794
795						if ( masonry && masonry.length ) {
796							JetEngine.initMasonry( masonry );
797						}
798
799					}
800
801				}
802
803			} ).done( doneCallback ).fail( function() {
804				container.removeAttr( 'style' );
805				if ( failCallback ) {
806					failCallback.call();
807				}
808
809			} );
810
811		},
812
813		handleMore: function( event ) {
814
815			event.preventDefault();
816
817			var self = this,
818				page = parseInt( self.container.data( 'page' ), 10 );
819
820			page++;
821
822			self.button.css({
823				pointerEvents: 'none',
824				opacity: '0.5',
825				cursor: 'default',
826			});
827
828			JetEngine.ajaxGetListing( {
829				handler: 'listing_load_more',
830				container: self.container,
831				masonry: self.masonry,
832				slider: self.slider,
833				append: true,
834				query: self.settings.query,
835				widgetSettings: self.settings.widget_settings,
836				page: page,
837			}, function( response ) {
838
839				self.button.removeAttr( 'style' );
840
841				if ( response.success && page === self.pages ) {
842					self.button.css( 'display', 'none' );
843				}
844
845			}, function() {
846				self.button.removeAttr( 'style' );
847			} );
848
849		},
850
851		initSlider: function( $slider, customOptions ) {
852			var options     = $slider.data( 'slider_options' ),
853				windowWidth = $( window ).width(),
854				tabletBP    = 1025,
855				mobileBP    = 768,
856				tabletSlides, mobileSlides, defaultOptions, slickOptions;
857
858			customOptions = customOptions || {};
859
860			options = $.extend( {}, options, customOptions );
861
862			if ( options.itemsCount <= options.slidesToShow.desktop && windowWidth >= tabletBP ) { // 1025 - ...
863				$slider.removeClass( 'jet-listing-grid__slider' );
864				return;
865			} else if ( options.itemsCount <= options.slidesToShow.tablet && tabletBP > windowWidth && windowWidth >= mobileBP ) { // 768 - 1024
866				$slider.removeClass( 'jet-listing-grid__slider' );
867				return;
868			} else if ( options.itemsCount <= options.slidesToShow.mobile && windowWidth < mobileBP ) { // 0 - 767
869				$slider.removeClass( 'jet-listing-grid__slider' );
870				return;
871			}
872
873			if ( options.slidesToShow.tablet ) {
874				tabletSlides = options.slidesToShow.tablet;
875			} else {
876				tabletSlides = 1 === options.slidesToShow.desktop ? 1 : 2;
877			}
878
879			if ( options.slidesToShow.mobile ) {
880				mobileSlides = options.slidesToShow.mobile;
881			} else {
882				mobileSlides = 1;
883			}
884
885			options.slidesToShow = options.slidesToShow.desktop;
886
887			defaultOptions = {
888				customPaging: function( slider, i ) {
889					return $( '<span />' ).text( i + 1 );
890				},
891				slide: '.jet-listing-grid__item',
892				dotsClass: 'jet-slick-dots',
893				responsive: [
894					{
895						breakpoint: 1025,
896						settings: {
897							slidesToShow: tabletSlides,
898						}
899					},
900					{
901						breakpoint: 768,
902						settings: {
903							slidesToShow: mobileSlides,
904							slidesToScroll: 1
905						}
906					}
907				]
908			};
909
910			slickOptions = $.extend( {}, defaultOptions, options );
911
912			var $sliderItems = $slider.find( '> .jet-listing-grid__items' );
913
914			if ( slickOptions.infinite ) {
915				$sliderItems.on( 'init', function() {
916					var $items        = $( this ),
917						$clonedSlides = $( '.slick-cloned', $items );
918
919					if ( !$clonedSlides.length ) {
920						return;
921					}
922
923					$clonedSlides.find( 'div[data-element_type]' ).each( function() {
924						var $this       = $( this ),
925							elementType = $this.data( 'element_type' );
926
927						if ( !elementType ) {
928							return;
929						}
930
931						if ( 'widget' === elementType ) {
932							elementType = $this.data( 'widget_type' );
933							window.elementorFrontend.hooks.doAction( 'frontend/element_ready/widget', $this, $ );
934						}
935
936						window.elementorFrontend.hooks.doAction( 'frontend/element_ready/' + elementType, $this, $ );
937
938					} );
939				} );
940			}
941
942			if ( $sliderItems.hasClass( 'slick-initialized' ) ) {
943				$sliderItems.slick( 'refresh', true );
944				return;
945			}
946
947			$sliderItems.slick( slickOptions );
948		},
949
950		maybeReinitSlider: function( event, $scope ) {
951			var $slider = $scope.find( '.jet-listing-grid__slider' );
952
953			if ( $slider.length ) {
954				$slider.each( function() {
955					JetEngine.initSlider( $( this ) );
956				} );
957			}
958		},
959
960		widgetDynamicField: function( $scope ) {
961
962			var $slider = $scope.find( '.jet-engine-gallery-slider' );
963
964			if ( $slider.length ) {
965				if ( $.isFunction( $.fn.imagesLoaded ) ) {
966					$slider.imagesLoaded().always( function( instance ) {
967						$slider.slick( $slider.data( 'atts' ) );
968					} );
969				}
970			}
971
972		},
973
974		switchCalendarMonth: function( $event ) {
975
976			var $this     = $( this ),
977				$calendar = $this.closest( '.jet-calendar' ),
978				$widget   = $calendar.closest( '.elementor-widget-container' ),
979				settings  = $calendar.data( 'settings' ),
980				post      = $calendar.data( 'post' ),
981				month     = $this.data( 'month' );
982
983			$calendar.addClass( 'jet-calendar-loading' );
984
985			JetEngine.currentRequest = {
986				action: 'jet_engine_calendar_get_month',
987				month: month,
988				settings: settings,
989				post: post,
990			};
991
992			$( document ).trigger( 'jet-engine-request-calendar' );
993
994			$.ajax({
995				url: JetEngineSettings.ajaxurl,
996				type: 'POST',
997				dataType: 'json',
998				data: JetEngine.currentRequest,
999			}).done( function( response ) {
1000				if ( response.success ) {
1001					$widget.html( response.data.content );
1002				}
1003				$calendar.removeClass( 'jet-calendar-loading' );
1004			} );
1005
1006
1007		},
1008
1009		filters: ( function() {
1010
1011			var callbacks = {};
1012
1013			return {
1014
1015				addFilter: function( name, callback ) {
1016
1017					if ( ! callbacks.hasOwnProperty( name ) ) {
1018						callbacks[name] = [];
1019					}
1020
1021					callbacks[name].push(callback);
1022
1023				},
1024
1025				applyFilters: function( name, value, args ) {
1026
1027					if ( ! callbacks.hasOwnProperty( name ) ) {
1028						return value;
1029					}
1030
1031					if ( args === undefined ) {
1032						args = [];
1033					}
1034
1035					var container = callbacks[ name ];
1036					var cbLen     = container.length;
1037
1038					for (var i = 0; i < cbLen; i++) {
1039						if (typeof container[i] === 'function') {
1040							value = container[i](value, args);
1041						}
1042					}
1043
1044					return value;
1045				}
1046
1047			};
1048
1049		})()
1050
1051	};
1052
1053	$( window ).on( 'elementor/frontend/init', JetEngine.init );
1054
1055	window.JetEngine = JetEngine;
1056
1057}( jQuery ) );

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.