1function getNextPage(buttonWrapper,buttonWrapperIndex,button,buttonIndex){const nextPage=button.href,postGridWrapper=buttonWrapper.parentNode,itemsWrapper=postGridWrapper.querySelector(".ub-post-grid-items"),url=new URL(nextPage),ubPage=new URLSearchParams(url.search).get("ub-page"),loaderContainer=document.createElement("div");loaderContainer.classList.add("ub-post-grid-loader"),postGridWrapper.classList.add("is-loading"),postGridWrapper.appendChild(loaderContainer),fetch(nextPage).then(response=>response.text()).then(response=>{const responseDocument=new DOMParser().parseFromString(response,"text/html"),newPostsWrapper=responseDocument.querySelectorAll(".wp-block-ub-post-grid .ub-post-grid-items")[buttonWrapperIndex],paginationWrapper=responseDocument.querySelectorAll(".wp-block-ub-post-grid .ub-post-grid-pagination")[buttonWrapperIndex];paginationWrapper.querySelectorAll("a.page-numbers").forEach((nextPageButton,nextPageButtonIndex)=>{nextPageButton.addEventListener("click",e=>{e.preventDefault(),getNextPage(paginationWrapper,buttonWrapperIndex,nextPageButton,nextPageButtonIndex)})}),itemsWrapper.replaceWith(newPostsWrapper),buttonWrapper.replaceWith(paginationWrapper),postGridWrapper.classList.remove("is-loading"),postGridWrapper.removeChild(loaderContainer);let queryParams=new URLSearchParams(window.location.search);ubPage?queryParams.set("ub-page",ubPage):queryParams.delete("ub-page"),history.pushState(null,null,"?"+queryParams.toString())}).catch(error=>{console.error(error)})}let currentPage=1;function addNewPosts(buttonWrapper,wrapperIndex,button){const url=new URL(location.href),pagekey="ub-page",totalPages=Number(buttonWrapper.dataset.total_pages);url.searchParams.set(pagekey,currentPage+1);const postsWrapper=buttonWrapper.previousElementSibling,buttonInnerText=button.innerText;button.innerText="Loading...",currentPage<totalPages&&fetch(url.href).then(response=>{if(!response.ok)throw new Error(`Network response was not ok: ${response.status}`);return response.text()}).then(responseText=>{new DOMParser().parseFromString(responseText,"text/html").querySelectorAll(".ub-post-grid-items")[wrapperIndex].querySelectorAll("article").forEach(post=>postsWrapper.appendChild(post)),currentPage++,button.innerText=buttonInnerText,currentPage>=totalPages-1&&(buttonWrapper.style.display="none")}).catch(error=>console.error("Error fetching data:",error))}window.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll(".ub-post-grid-pagination").forEach((wrapper,wrapperIndex)=>{if(wrapper.classList.contains("ub-number-pagination"))wrapper.querySelectorAll("a.page-numbers").forEach((button,buttonIndex)=>{button.addEventListener("click",e=>{e.preventDefault(),getNextPage(wrapper,wrapperIndex,button,buttonIndex)})});
1else{const loadMoreButton=wrapper.querySelector(".ub-load-more-button");loadMoreButton.addEventListener("click",()=>{addNewPosts(wrapper,wrapperIndex,loadMoreButton)})}})});
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.