PageSourceSearch

https://fuyindiantai.org/wp-content/plugins/dynamic-content-for-elementor/assets/js/views.js?ver=3.4.18

js fuyindiantai.org collected 2026-10-10 01:45:10 UTC 11,410 bytes, 367 lines download raw bytes

1(function ($) {
2	var WidgetElements_ViewsHandler = function ($scope, $) {
3		var id_scope = $scope.attr("data-id");
4		var elementSettings = dceGetElementSettings($scope);
5		var widgetId = $scope.data('id'); 
6		
7		// Handle slideshow format with Swiper
8		if (elementSettings.dce_views_style_format === "slideshow") {
9			// Variables for Slideshow
10			let swiper_class = '.swiper';
11			var elementSwiper = $scope.find(swiper_class);
12			var speed = elementSettings.transition_speed;
13			var disableOnInteraction = Boolean(elementSettings.pause_on_interaction) || false;
14			var loop = false;
15
16			if ("yes" === elementSettings.infinite) {
17				loop = true;
18			}
19
20			var id_post = $scope.attr("data-post-id");
21
22			var viewsSwiperOptions = {
23				autoHeight: true,
24				speed: speed,
25				loop: loop,
26			};
27
28			// Responsive Parameters
29			viewsSwiperOptions.breakpoints = dynamicooo.makeSwiperBreakpoints(
30				{
31					slidesPerView: {
32						elementor_key: "slides_to_show",
33						default_value: "auto",
34					},
35					slidesPerGroup: {
36						elementor_key: "slides_to_scroll",
37						default_value: 1,
38					},
39					spaceBetween: {
40						elementor_key: "spaceBetween",
41						default_value: 0,
42					},
43				},
44				elementSettings,
45			);
46
47			// Navigation
48			if (elementSettings.navigation != "none") {
49				if (
50					elementSettings.navigation == "both" ||
51					elementSettings.navigation == "arrows"
52				) {
53					// Prevent text selection on navigation buttons
54					let nextSelector = id_post
55						? ".elementor-element-" +
56							id_scope +
57							'[data-post-id="' +
58							id_post +
59							'"] .elementor-swiper-button-next'
60						: ".elementor-swiper-button-next";
61					let prevSelector = id_post
62						? ".elementor-element-" +
63							id_scope +
64							'[data-post-id="' +
65							id_post +
66							'"] .elementor-swiper-button-prev'
67						: ".elementor-swiper-button-prev";
68					
69					let nextElement = $scope.find(nextSelector)[0];
70					let prevElement = $scope.find(prevSelector)[0];
71					
72					if (nextElement) {
73						nextElement.addEventListener('mousedown', function(e) {
74							e.preventDefault();
75						});
76						// Keyboard accessibility for navigation buttons
77						nextElement.addEventListener('keydown', function(e) {
78							if (e.key === 'Enter' || e.key === ' ') {
79								e.preventDefault();
80								nextElement.click();
81							}
82						});
83					}
84					if (prevElement) {
85						prevElement.addEventListener('mousedown', function(e) {
86							e.preventDefault();
87						});
88						// Keyboard accessibility for navigation buttons
89						prevElement.addEventListener('keydown', function(e) {
90							if (e.key === 'Enter' || e.key === ' ') {
91								e.preventDefault();
92								prevElement.click();
93							}
94						});
95					}
96					
97					viewsSwiperOptions = $.extend(viewsSwiperOptions, {
98						navigation: {
99							nextEl: nextSelector,
100							prevEl: prevSelector,
101						},
102					});
103				}
104
105				if (
106					elementSettings.navigation == "both" ||
107					elementSettings.navigation == "dots"
108				) {
109					viewsSwiperOptions = $.extend(viewsSwiperOptions, {
110						pagination: {
111							el: id_post
112								? ".elementor-element-" +
113									id_scope +
114									'[data-post-id="' +
115									id_post +
116									'"] .swiper-pagination'
117								: ".swiper-pagination",
118							type: "bullets",
119							clickable: true,
120						},
121					});
122				}
123			}
124
125			// Autoplay
126			if (elementSettings.autoplay) {
127				viewsSwiperOptions = $.extend(viewsSwiperOptions, {
128					autoplay: {
129						autoplay: true,
130						delay: elementSettings.autoplay_speed,
131						disableOnInteraction: disableOnInteraction,
132					},
133				});
134			}
135
136			const asyncSwiper = elementorFrontend.utils.swiper;
137
138			new asyncSwiper(elementSwiper, viewsSwiperOptions)
139				.then((newSwiperInstance) => {
140					viewsSwiper = newSwiperInstance;
141				})
142				.catch((error) => console.log(error));
143
144			// Pause on hover
145			if (elementSettings.autoplay && elementSettings.pause_on_hover) {
146				$(elementSwiper).on({
147					mouseenter: function () {
148						viewsSwiper.autoplay.stop();
149					},
150					mouseleave: function () {
151						viewsSwiper.autoplay.start();
152					},
153				});
154			}
155			
156			return; // Exit early for slideshow format
157		}
158		
159		// Handle table format with DataTables
160		if (elementSettings.dce_views_style_format === "table" && elementSettings.dce_views_style_table_data) {
161			var $table = $scope.find('table.dce-datatable');
162			
163			var options = {
164				order: [],
165				ordering: true
166			};
167			
168			// Add language URL from separate i18n files
169			if (typeof window.getDataTablesLanguageUrl === 'function') {
170				var language = $('html').attr('lang') || 'en';
171				var languageUrl = window.getDataTablesLanguageUrl(language);
172				
173				if (languageUrl) {
174					options.language = {
175						url: languageUrl
176					};
177				}
178			}
179			
180			if (elementSettings.dce_views_style_table_data_autofill) {
181				options.autoFill = true;
182			}
183			
184			if (elementSettings.dce_views_style_table_data_buttons) {
185				options.dom = 'Bfrtip';
186				options.buttons = [
187					'copyHtml5',
188					'excelHtml5',
189					'csvHtml5',
190					'pdfHtml5'
191				];
192			}
193			
194			if (elementSettings.dce_views_style_table_data_colreorder) {
195				options.colReorder = true;
196			}
197			
198			if (elementSettings.dce_views_style_table_data_fixedcolumns) {
199				options.fixedColumns = true;
200			}
201			
202			if (elementSettings.dce_views_style_table_data_fixedheader) {
203				options.fixedHeader = true;
204			}
205			
206			if (elementSettings.dce_views_style_table_data_keytable) {
207				options.keys = true;
208			}
209			
210			if (elementSettings.dce_views_style_table_data_responsive) {
211				options.responsive = true;
212			}
213			
214			if (elementSettings.dce_views_style_table_data_rowgroup) {
215				options.rowGroup = {
216					dataSrc: 'group'
217				};
218			}
219			
220			if (elementSettings.dce_views_style_table_data_rowreorder) {
221				options.rowReorder = true;
222			}
223			
224			if (elementSettings.dce_views_style_table_data_scroller) {
225				options.scroller = true;
226				options.scrollX = true;
227				if (elementSettings.dce_views_style_table_data_scroller_y) {
228					options.scrollY = 200;
229				}
230				options.paging = true;
231				options.deferRender = true;
232			} else {
233				options.paging = false;
234			}
235			
236			if (elementSettings.dce_views_style_table_data_select) {
237				options.select = true;
238			}
239			
240			$table.DataTable(options);
241		}
242		
243		// Handle AJAX Exposed Form
244		if (elementSettings.dce_views_where_form_ajax) {
245			
246			// Update results function
247			function updateResults() {
248				var resultContainer = '.elementor-element-' + widgetId + ' .dce-view-results-wrapper';
249				var sortContainer = '.elementor-element-' + widgetId + ' .dce-view-exposed-sort-wrapper';
250				var paginationContainer = '.elementor-element-' + widgetId + ' .dce-view-posts-pagination-wrapper';
251				var filtersContainer = '.elementor-element-' + widgetId + ' .dce-view-form-filters-wrapper';
252				
253				jQuery(resultContainer).html('<div class="dce-preloader" style="text-align: center;"><i class="fa fa-cog fa-spin fa-3x fa-fw"></i><span class="sr-only">Loading...</span></div>');
254				
255				jQuery.get('?' + jQuery('#dce-view-form-' + widgetId).serialize(), function(data) {
256					jQuery(resultContainer).html(jQuery(data).find(resultContainer).html());
257					jQuery(sortContainer).html(jQuery(data).find(sortContainer).html());
258					
259					if (jQuery(data).find(paginationContainer).length) {
260						jQuery(paginationContainer).html(jQuery(data).find(paginationContainer).html());
261					} else {
262						jQuery(paginationContainer).html('');
263					}
264					
265					jQuery(filtersContainer).html(jQuery(data).find(filtersContainer).html());					
266					jQuery(document).trigger('dce/views/exposedform/after');
267				});
268			}
269			
270			// Form submit handler
271			$scope.find('.dce-view-form').on('submit', function() {
272				updateResults();
273				return false;
274			});
275			
276		// On change handler if enabled
277		if (elementSettings.dce_views_where_form_ajax_onchange) {
278			// Text inputs: use 'input' for real-time updates
279			$scope.find('.dce-view-form input:not([type=checkbox]):not([type=radio]):not([type=reset])').on('input', function() {
280				updateResults();
281			});
282			
283			// Select, checkbox, radio: use 'change'
284			$scope.find('.dce-view-form select, .dce-view-form input[type=checkbox], .dce-view-form input[type=radio]').on('change', function() {
285				updateResults();
286			});
287			
288			$scope.find('.dce-view-form input[type=reset]').on('click', function() {
289				setTimeout(updateResults, 100);
290			});
291		}
292		}
293		
294		// Handle AJAX Pagination
295		if (elementSettings.dce_views_pagination_ajax) {
296			$scope.on('click', '.dce-posts-pagination a', function(e) {
297				e.preventDefault(); // Ensure default action is prevented
298				
299				var widgetContainer = '.elementor-element-' + widgetId + ' .dce-view-results-wrapper';
300				var paginationContainer = '.elementor-element-' + widgetId + ' .dce-view-posts-pagination-wrapper';
301				
302				jQuery(widgetContainer).html('<div class="dce-preloader" style="text-align: center;"><i class="fa fa-cog fa-spin fa-3x fa-fw"></i><span class="sr-only">Loading...</span></div>');
303
304				jQuery.get(jQuery(this).attr('href'), function(data) {
305					if (jQuery(data).find(widgetContainer).length) {
306						jQuery(widgetContainer).html(jQuery(data).find(widgetContainer).html());
307					}
308					
309					if (jQuery(data).find(paginationContainer).length) {
310						jQuery(paginationContainer).html(jQuery(data).find(paginationContainer).html());
311					}
312				});
313				
314				return false;
315			});
316		}
317		
318		// Handle Infinite Scroll
319		if (elementSettings.dce_views_pagination_type === 'infinite_scroll' && !elementorFrontend.isEditMode()) {
320			var infiniteOptions = {
321				path: '.elementor-element-' + widgetId + ' .pagination__next',
322				append: '.elementor-element-' + widgetId + ' .dce-view-archive .dce-view-single-wrapper',
323				hideNav: '.elementor-element-' + widgetId + ' .dce-posts-navigation',
324				status: '.elementor-element-' + widgetId + ' .scroller-status',
325				debug: true
326			};
327			
328			if (elementSettings.dce_views_limit_scroll_button) {
329				infiniteOptions.button = '.elementor-element-' + widgetId + ' .view-more-button';
330				infiniteOptions.scrollThreshold = false;
331			}
332			
333			$scope.find('.dce-view-archive').infiniteScroll(infiniteOptions);
334			
335			// Handle events (InfiniteScroll only handles p.infinite-scroll-last, not div)
336			$scope.find('.dce-view-archive')
337				.on('last.infiniteScroll', function(event, response, path) {
338					jQuery(this).find('.infinite-scroll-last').fadeIn();
339				})
340				.on('request.infiniteScroll', function(event, path) {
341					jQuery(this).find('.infinite-scroll-request').show();
342				})
343				.on('append.infiniteScroll', function(event, response, path, items) {
344					jQuery(this).find('.infinite-scroll-request').hide();
345				});
346		}
347		
348		// Handle AJAX Filter
349		if (elementSettings.dce_views_where_form_ajax) {
350			$scope.on('click', '.dce-view-form-filter a', function() {
351				var field_container = '.elementor-element-' + widgetId + ' .dce-view-form-wrapper .elementor-field-group-' + jQuery(this).data('field');
352				jQuery(field_container).find('input').val('');
353				jQuery(field_container).find('select').val('');
354				jQuery(field_container).find('input:checked').prop('checked', false);
355				jQuery(field_container).find('input,select').trigger('change');
356				return false;
357			});
358		}
359	};
360
361	$(window).on("elementor/frontend/init", function () {
362		elementorFrontend.hooks.addAction(
363			"frontend/element_ready/dce-views.default",
364			WidgetElements_ViewsHandler,
365		);
366	});
367})(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.