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.