1if (document.querySelector('.heavyLoopBuilderPage')) { 2 document.addEventListener('DOMContentLoaded', function () { 3 4 // mark all widgets as initialized 5 document.querySelectorAll('.elementor-widget[data-element_type]').forEach(function (ajaxWidget) { 6 ajaxWidget.classList.add('heavy-ajax-initialized'); 7 }); 8 9 document.addEventListener('click', function (event) { 10 if (event.target.matches('.heavyLoopBuilderPage, .heavyLoopBuilderPage *')) { 11 event.preventDefault(); 12 13 if (document.querySelector('body').classList.contains('elementor-editor-active')) { 14 return; 15 } 16 17 let button = event.target; 18 19 if (!button.classList.contains('heavyLoopBuilderPage')) { 20 button = button.closest('.heavyLoopBuilderPage'); 21 } 22 23 if (button.classList.contains('loading') || button.classList.contains('disabled')) { 24 return; 25 } 26 27 const builder = button.closest('.heavy-loop-builder'); 28 29 if (builder.classList.contains('loading')) { 30 return; 31 } 32 33 builder.classList.add('loading'); 34 button.classList.add('loading'); 35 36 const widget_id = builder.getAttribute('data-id'); 37 const pageNumb = button.getAttribute('data-page'); 38 const pagePHolder = builder.getAttribute('data-placeholder'); 39 const fetchUrl = builder.getAttribute('data-fetch').replace(pagePHolder, pageNumb); 40 const pageUrl = builder.getAttribute('data-page').replace(pagePHolder, pageNumb); 41 const mode = builder.getAttribute('data-mode'); 42 const updateRouting = builder.classList.contains('update-routing'); 43 44 // for multiple loop builders on one page 45 if (updateRouting) { 46 const prevClickedButton = document.querySelector('.heavy-loop-builder.last-triggered'); 47 if (prevClickedButton) { 48 prevClickedButton.classList.remove('last-triggered'); 49 } 50 builder.classList.add('last-triggered'); 51 } 52 53 return fetch(fetchUrl).then(result => result.text()).then(result => { 54 const newPage = (new DOMParser).parseFromString(result, "text/html"); 55 const newContent = newPage.querySelector('.heavy-loop-builder[data-id="' + widget_id + '"] .heavy-loop-wrapper'); 56 const newNav = newPage.querySelector('.heavy-loop-builder[data-id="' + widget_id + '"] .heavy-loop-builder-nav-wrap'); 57 58 if (newContent) { 59 if (mode === 'more') { 60 // append 61 builder.querySelector('.heavy-loop-wrapper').insertAdjacentHTML('beforeend', newContent.innerHTML); 62 } else { 63 // replace 64 builder.querySelector('.heavy-loop-wrapper').innerHTML = newContent.innerHTML; 65 66 if (updateRouting) { 67 if (button.classList.contains('heavy-history')) { 68 button.classList.remove('heavy-history'); 69 const tmpButton = document.querySelector('.heavy-loop-tmp-button'); 70 if (tmpButton) { 71 tmpButton.remove(); 72 } 73 } else { 74 if (builder.classList.contains('update-routing')) { 75 window.history.pushState('page' + pageNumb, document.title, pageUrl); 76 } 77 } 78 } 79 80 if (builder.classList.contains('hlb-scroll-up')) { 81 let builderTop = builder.getBoundingClientRect().top + window.scrollY; 82 const adminBar = document.querySelector('#wpadminbar'); 83 if (adminBar) { 84 builderTop = builderTop - adminBar.offsetHeight; 85 } 86 87 builderTop = builderTop - 20; 88 if (builderTop < 0) { 89 builderTop = 0; 90 } 91 92 window.scrollTo({ top: builderTop, behavior: 'smooth'}); 93 } 94 95 } 96 97 // init ajaxed widgets 98 builder.querySelectorAll('.elementor-widget[data-element_type]:not(.heavy-ajax-initialized)').forEach(function (ajaxWidget) { 99 elementorFrontend.elementsHandler.runReadyTrigger(ajaxWidget); 100 ajaxWidget.classList.add('heavy-ajax-initialized'); 101 }); 102 103 // replace navigation 104 if (newNav) { 105 builder.querySelector('.heavy-loop-builder-nav-wrap').innerHTML = newNav.innerHTML; 106 } else { 107 builder.querySelector('.heavy-loop-builder-nav-wrap').remove(); 108 } 109 } else { 110 button.classList.remove('loading'); 111 console.log('Can\'t load more in: .heavy-loop-builder[data-id="' + widget_id + '"]'); 112 } 113 114 builder.classList.remove('loading'); 115 }); 116 } 117 }, false); 118 }); 119} 120 121if (document.querySelector('.heavy-loop-builder.update-routing')) { 122 addEventListener("popstate", function () { 123 if (document.querySelector('body').classList.contains('elementor-editor-active')) { 124 return; 125 } 126 127 // get new page number from current url 128 let newUrl = window.location.href; 129 let newPage = 1; 130 if (newUrl.indexOf('/page/') > -1) { 131 newPage = newUrl.split('/page/'); 132 newPage = newPage[1]; 133 newPage = newPage.split('/'); 134 newPage = parseInt(newPage[0]); 135 if (!newPage) { 136 newPage = 1; 137 } 138 } 139 140 // find builder 141 let builder = document.querySelector('.heavy-loop-builder.update-routing.last-triggered'); 142 if (!builder) { 143 builder = document.querySelector('.heavy-loop-builder.update-routing'); 144 } 145 if (!builder) { 146 return; 147 } 148 149 // find button to push 150 let button; 151 if (builder.querySelector('.heavyLoopBuilderPage.heavy-loop-builder-nav-numbers')) { 152 // if we have page numbers, trigger them 153 button = builder.querySelector('.heavyLoopBuilderPage.heavy-loop-builder-nav-numbers[data-page="' + newPage + '"]'); 154 } else { 155 // if we have only prev and next buttons 156 button = builder.querySelector('.heavyLoopBuilderPage.heavy-loop-builder-prev-next[data-page="' + newPage + '"]'); 157 } 158 159 if (!button) { 160 // no button with such page - let's create one 161 builder.insertAdjacentHTML('beforeend', '<a data-page="' + newPage + '" class="heavyLoopBuilderPage heavy-loop-tmp-button"></a>'); 162 button = document.querySelector('.heavyLoopBuilderPage.heavy-loop-tmp-button[data-page="' + newPage + '"]'); 163 } 164 165 // flag - we don't want to push history 166 button.classList.add('heavy-history'); 167 168 button.click(); 169 }); 170} 171 172document.addEventListener('scroll', function () { 173 if (document.querySelector('body').classList.contains('elementor-editor-active')) { 174 return; 175 } 176 177 const button = document.querySelector('.heavyLoopBuilderInf'); 178 if (!button) { 179 return; 180 } 181 182 const builder = button.closest('.heavy-loop-builder'); 183 let triggerEl = builder.querySelector('.heavy-loop-item:last-child'); 184 if (!triggerEl) { 185 triggerEl = button; 186 } 187 188 const windowH = window.innerHeight || document.documentElement.clientHeight; 189 const rect = triggerEl.getBoundingClientRect(); 190 let offset = 0; 191 const adminBar = document.querySelector('#wpadminbar'); 192 if (adminBar) { 193 offset = adminBar.offsetHeight; 194 } 195 196 if ((rect.top - windowH) <= 0 && (rect.bottom - offset) >= 0) { 197 button.click(); 198 } 199});
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.