1(function() { 2 const pages = {}; 3 4 document.addEventListener('DOMContentLoaded', function () { 5 const wrappers = document.querySelectorAll('.netsposts-screen.ajax_load'); 6 for(const parentPostWrapper of wrappers) { 7 attachNavigationClickListeners(parentPostWrapper); 8 } 9 }); 10 11 function setWrapperId(wrapper){ 12 const id = Math.round(Math.random() * 1000) + 1; 13 wrapper.setAttribute('data-id', id); 14 return id; 15 } 16 17 function attachNavigationClickListeners(wrapper){ 18 const paginationLinks = wrapper.querySelectorAll('.netsposts-paginate a.page-numbers'); 19 for (const link of paginationLinks) { 20 link.addEventListener('click', handlePaginationLinkClick); 21 } 22 } 23 24 function handlePaginationLinkClick(e){ 25 e.preventDefault(); 26 const link = e.target; 27 const url = link.getAttribute('href'); 28 const parent = link.parentElement.parentElement.parentElement; 29 loadPosts(url, parent); 30 } 31 32 function loadPosts(url, parentScreen){ 33 showPreloader(parentScreen); 34 let currentPostWrapper = parentScreen.querySelector('.netsposts-block-wrapper.current'); 35 const parentScreenId = parentScreen.getAttribute('id'); 36 if(isPageLoaded(parentScreenId, url)){ 37 setTimeout(function(){ 38 // Hide previous page 39 currentPostWrapper.classList.add('hidden'); 40 currentPostWrapper.classList.remove('current'); 41 /* 42 * Assign and show the new page. 43 */ 44 const pageId = pages[parentScreenId][url]; 45 const selector = ".netsposts-block-wrapper[data-id='" + pageId + "']"; 46 const nextParentPostWrapper = parentScreen.querySelector(selector); 47 nextParentPostWrapper.classList.remove('hidden'); 48 nextParentPostWrapper.classList.add('current'); 49 hidePreloader(parentScreen); 50 }, 200); 51 } else { 52 getPageDoc(url).then(function (pageDoc) { 53 const postWrapperSelector = '#' + parentScreenId + ' > .netsposts-block-wrapper'; 54 const wrapper = pageDoc.querySelector(postWrapperSelector); 55 if(!pages[parentScreenId]){ 56 pages[parentScreenId] = {}; 57 } 58 pages[parentScreenId][url] = setWrapperId(wrapper); 59 60 currentPostWrapper.classList.add('hidden'); 61 currentPostWrapper.classList.remove('current'); 62 63 const preloader = parentScreen.querySelector('.netsposts-preloader'); 64 parentScreen.insertBefore(wrapper, preloader); 65 attachNavigationClickListeners(wrapper); 66 hidePreloader(parentScreen); 67 }); 68 } 69 //window.history.pushState({}, document.title, url); 70 } 71 72 function showPreloader(parent){ 73 const preloader = parent.querySelector('.netsposts-preloader'); 74 preloader.classList.remove('hidden'); 75 } 76 77 function hidePreloader(parent){ 78 const preloader = parent.querySelector('.netsposts-preloader'); 79 preloader.classList.add('hidden'); 80 } 81 82 function isPageLoaded(screenId, url){ 83 return pages.hasOwnProperty(screenId) && pages[screenId].hasOwnProperty(url); 84 } 85 86 function getPageDoc(url){ 87 return loadPage(url).then(pageContent => { 88 const loadedDoc = document.implementation.createHTMLDocument(); 89 loadedDoc.documentElement.innerHTML = pageContent; 90 return loadedDoc; 91 }); 92 } 93 94 function loadPage(url){ 95 return fetch(url).then(response => response.text()); 96 } 97})();
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.