1const blocks = document.querySelectorAll(".cgb-dynamic-entries-load"); 2 3function setBoxContent(element, amount) { 4 const totalContent = element.children.length; 5 6 for (let i = 0; i < totalContent; i++) { 7 const child = element.children[i]; 8 9 if (i < amount) child.style.display = "block"; 10 11 if (i === totalContent - 1 && child.style.display === "block") 12 return true; 13 } 14} 15 16for (const block of blocks) { 17 const content = block.querySelector(".cgb-preloaded-content"); 18 const loadMoreBtn = block.querySelector(".cgb-load-more-btn"); 19 const loadOffset = +block.dataset.initialcontent || 2; 20 21 let loadMoreUrl = block.dataset.url || false; 22 let loadMoreAjaxified = block.dataset.ajax === 'true' || false; 23 24 let page = 1; 25 26 let displayedContent = loadOffset; 27 setBoxContent(content, displayedContent); 28 29 if (content.children.length <= 2 || content.children.length < loadOffset) 30 loadMoreBtn.classList.add("disabled"); 31 32 loadMoreBtn.addEventListener("click", () => { 33 if ( loadMoreAjaxified ) { 34 page += 1; 35 36 // Disable load more button until request is resolved 37 loadMoreBtn.classList.add("disabled"); 38 39 // AJAX request 40 const pagedLoadMoreUrl = new URL( loadMoreUrl ); 41 pagedLoadMoreUrl.searchParams.set( 'ajax', 'true' ); 42 pagedLoadMoreUrl.toString(); 43 44 var request = new XMLHttpRequest(); 45 46 request.open('GET', pagedLoadMoreUrl, true); 47 48 request.onload = function () { 49 if (this.status >= 200 && this.status < 400) { 50 // Success! 51 var response = JSON.parse(this.response); 52 53 const container = document.createElement('div'); 54 container.innerHTML = response.data.html; 55 56 const fragment = document.createDocumentFragment(); 57 58 const items = container.querySelectorAll('.cgb-dynamic-entries-load .cgb-carousel-item'); 59 60 const targetElement = document.querySelector('.cgb-preloaded-content'); 61 62 items.forEach((item) => { 63 item.style.display = "block"; 64 fragment.appendChild(item); 65 }); 66 67 targetElement.appendChild(fragment); 68 69 // Set the next AJAX URL 70 loadMoreUrl = container.querySelector( '.cgb-dynamic-entries-load' ).dataset.url || false; 71 72 loadMoreBtn.classList.remove("disabled"); 73 } else { 74 if ( this.status === 404 ) { 75 // No more posts 76 loadMoreBtn.classList.add("disabled"); 77 } 78 } 79 }; 80 81 request.onerror = function () { 82 // No more posts 83 loadMoreBtn.classList.add("disabled"); 84 }; 85 86 request.send(); 87 } else { 88 displayedContent += loadOffset; 89 90 const reachedMax = setBoxContent(content, displayedContent); 91 if (reachedMax) loadMoreBtn.classList.add("disabled"); 92 } 93 }); 94}
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.