PageSourceSearch

https://impa.br/wp-content/themes/impa-2024/snippets/loadMoreAjax/script.js?v=1790846413&ver=7.1.2

js impa.br collected 2026-10-01 09:23:54 UTC 3,813 bytes, 147 lines download raw bytes

1(function ($) {
2	function fetchPosts(requestData, onSuccess, onError) {
3		$.ajax({
4			type: "POST",
5			url: ajax_object.ajax_url,
6			data: requestData,
7			dataType: "json",
8			success: function (response) {
9				if (response.data.success) {
10					onSuccess(response.data);
11				} else {
12					console.error("Nenhum conteúdo retornado.");
13					onError("Nenhum conteúdo retornado.");
14				}
15			},
16			error: function (jqXHR, textStatus, errorThrown) {
17				console.error(
18					"Erro na requisição:",
19					jqXHR.responseText,
20					textStatus,
21					errorThrown
22				);
23				onError("Erro detectado, tente novamente mais tarde!");
24			},
25		});
26	}
27
28	function updateGrid(container, data) {
29		let grid = container.find("[load_more_grid]");
30		let button = container.find("[load_more_btn]");
31		let lastPagination = parseInt(grid.attr("data-pagination")) || 1;
32
33		grid.append(data.html);
34		grid.attr("data-pagination", lastPagination + 1);
35
36		if (data.has_more_posts) {
37			button.fadeIn();
38		}
39	}
40
41	function loadMorePosts(container) {
42		// Se já estiver carregando, não dispara nova requisição.
43		if (container.data("loading")) return;
44		container.data("loading", true);
45
46		let grid = container.find("[load_more_grid]");
47		let button = container.find("[load_more_btn]");
48		let textNotFound = grid.attr("data-text_not_found");
49
50		let pagination = grid.attr("data-pagination");
51		if (!pagination) {
52			pagination = "1";
53			grid.attr("data-pagination", pagination);
54		}
55
56		button.hide();
57
58		let requestData = {
59			action: "load_more_noticias",
60			args: grid.attr("data-argsJson"),
61			templatePart: grid.attr("data-templatePart"),
62			pagination: pagination,
63		};
64
65		fetchPosts(
66			requestData,
67			(data) => {
68				updateGrid(container, data);
69				container.data("loading", false); // Libera o bloqueio após sucesso.
70			},
71			(errorMessage) => {
72				if (!grid.html().trim()) {
73					grid.html(`<p>${textNotFound}</p>`);
74				}
75				container.data("loading", false); // Libera o bloqueio em caso de erro.
76			}
77		);
78	}
79
80	$(document).on("click", "[load_more_btn]", function (e) {
81		e.preventDefault();
82		loadMorePosts($(this).closest("[load_more_container]"));
83	});
84
85	$(document).on("submit", "[load_more_container] form", function (e) {
86		e.preventDefault();
87
88		let form = $(this);
89		let container = form.parents("[load_more_container]");
90		let grid = container.find("[load_more_grid]");
91		let search = form.find("[name=s]").val();
92		let select = form.find("[name=categorias]");
93		let category = form.find("[name=categorias] option:selected").val();
94
95		let argsJson = {};
96		try {
97			argsJson = JSON.parse(grid.attr("data-argsJson")) || {};
98		} catch (error) {
99			console.error("Erro ao analisar JSON:", error);
100		}
101
102		if (select.length) {
103			if (category) {
104				let taxonomy_post = form.find("[name=taxonomy_post]").val();
105				argsJson.tax_query = [
106					{
107						taxonomy: taxonomy_post,
108						field: "slug",
109						terms: category,
110					},
111				];
112			} else {
113				delete argsJson.tax_query;
114			}
115		}
116
117		search ? (argsJson.s = search) : delete argsJson.s;
118		delete argsJson.offset;
119
120		console.log(argsJson);
121
122		grid
123			.attr("data-argsJson", JSON.stringify(argsJson))
124			.attr("data-pagination", 0);
125
126		grid.html("");
127
128		// grid.find("[grid_item]").remove();
129
130		loadMorePosts(container);
131	});
132
133	$(document).on("change", "[load_more_container] form select", function () {
134		$(this).closest("form").trigger("submit");
135	});
136
137	let typingTimer;
138	const typingDelay = 800;
139
140	$(document).on("keyup", "[load_more_container] form [name=s]", function () {
141		clearTimeout(typingTimer);
142		typingTimer = setTimeout(
143			() => $(this).closest("form").trigger("submit"),
144			typingDelay
145		);
146	});
147})(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.