// ==UserScript== // @name Return Pagination to Google // @description Makes Google searches break down into separate pages, rather than displaying as one continuous page. (Quick & Dirty) // @namespace Violentmonkey Scripts // @match https://www.google.com/search // @grant none // @version 1.3 // @author Jupiter Liar // @license Attribution CC BY // @description 6/15/2023, 6:15 PM // @downloadURL none // ==/UserScript== // Function to generate links for the page numbers function generatePageLink(urlWithoutAnchor, startParam, startValue, newStartValue) { if (newStartValue === 0) { newStartValue = '0'; } var linkHref; if (startIndex === -1) { linkHref = urlWithoutAnchor + startParam + newStartValue; } else { linkHref = urlWithoutAnchor.replace(startParam + startValue, startParam + newStartValue); } return linkHref; } // Check if the page has the required conditions if (document.getElementById('botstuff') && !document.querySelector('table.AaVjTc')) { // Create the table element var table = document.createElement('table'); table.className = 'AaVjTc return-pagination'; // Added 'return-pagination' class to the table table.style.margin = 'auto'; table.style.marginBottom = '32px'; table.style.scale = '80%'; // Create a variable to store the page number var pageNumber; // Extract the page number from the URL var startParam = "&start="; var startIndex = window.location.href.indexOf(startParam); if (startIndex === -1) { pageNumber = 1; } else { var startValue = parseInt(window.location.href.substring(startIndex + startParam.length)); pageNumber = Math.floor(startValue / 10) + 1; } // Remove the anchor portion from the URL var urlWithoutAnchor = window.location.href.split("#")[0]; // Create the table columns for (var i = 0; i < 11; i++) { var column = document.createElement('td'); column.style.textAlign = 'center'; column.style.verticalAlign = 'middle'; // Changed from 'baseline' to 'middle' column.style.minWidth = '20px'; column.style.fontSize = '20pt'; // Add padding to middle columns if (i > 0 && i < 10) { column.style.padding = '0 8pt'; // Changed from '0 8px' to '0 8pt' } // Add padding to previous and next columns if (i === 0 || i === 10) { column.style.padding = '0 16pt'; // Changed from '0 16px' to '0 16pt' } // Add content to the columns if (i === 0) { if (pageNumber !== 1) { var previousLink = document.createElement('a'); previousLink.href = urlWithoutAnchor.replace(startParam + startValue, startParam + (startValue - 10)); var previousSpan = document.createElement('span'); previousSpan.style.padding = '0 16pt'; // Changed from '0 8pt' to '0 16pt' previousSpan.style.fontSize = '28pt'; previousSpan.style.verticalAlign = 'middle'; // Added vertical-align style previousSpan.innerText = '<'; previousLink.appendChild(previousSpan); var previousTextSpan = document.createElement('span'); previousTextSpan.style.verticalAlign = 'middle'; // Added vertical-align style previousTextSpan.innerText = 'Previous'; previousLink.appendChild(previousTextSpan); column.appendChild(previousLink); } } else if (i === 10) { var nextLink = document.createElement('a'); var nextStartValue = (pageNumber) * 10; if (startIndex === -1) { nextLink.href = urlWithoutAnchor + startParam + nextStartValue; } else { nextLink.href = urlWithoutAnchor.replace(startParam + startValue, startParam + nextStartValue); } var nextTextSpan = document.createElement('span'); nextTextSpan.style.verticalAlign = 'middle'; // Added vertical-align style nextTextSpan.innerText = 'Next'; nextLink.appendChild(nextTextSpan); var nextSpan = document.createElement('span'); nextSpan.style.padding = '0 16pt'; // Changed from '0 8pt' to '0 16pt' nextSpan.style.fontSize = '28pt'; nextSpan.style.verticalAlign = 'middle'; // Added vertical-align style nextSpan.innerText = '>'; nextLink.appendChild(nextSpan); column.appendChild(nextLink); } else { // Calculate the page number for the column var columnNumber; if (pageNumber < 5) { columnNumber = i; } else if (pageNumber >= 5) { columnNumber = pageNumber - 5 + i; } if (columnNumber === pageNumber) { // Add page number without link column.innerText = columnNumber; } else { // Generate links for the page number var newStartValue = (columnNumber - 1) * 10; var linkHref = generatePageLink(urlWithoutAnchor, startParam, startValue, newStartValue); // Create the link element var link = document.createElement('a'); link.href = linkHref; link.innerText = columnNumber; // Append the link to the column column.appendChild(link); } } // Add class to the column column.classList.add(`ret-pag-col-${i + 1}`); // Append the column to the table table.appendChild(column); } // Check if the first column is empty and delete it var firstColumn = table.querySelector('td:first-child'); if (firstColumn.innerText === '') { table.removeChild(firstColumn); } // Append the table to the 'botstuff' div var botstuffDiv = document.getElementById('botstuff'); botstuffDiv.appendChild(table); } // ... // Check if the page has the required conditions if (document.getElementById('botstuff')) { var botstuffDiv = document.getElementById('botstuff'); var divsToHide = botstuffDiv.querySelectorAll('div[jscontroller="ogmBcd"]'); for (var i = 0; i < divsToHide.length; i++) { divsToHide[i].style.display = "none"; } } // Function to hide elements with class "C4clhf" function hideElementWithClass(className) { var elements = document.getElementsByClassName(className); for (var i = 0; i < elements.length; i++) { elements[i].style.display = "none"; } } // Function to handle mutations and hide elements function handleMutations(mutationsList) { for (var i = 0; i < mutationsList.length; i++) { var mutation = mutationsList[i]; var addedNodes = mutation.addedNodes; for (var j = 0; j < addedNodes.length; j++) { var addedNode = addedNodes[j]; if (addedNode.classList && addedNode.classList.contains("C4clhf")) { hideElementWithClass("C4clhf"); } } } } // Create a new mutation observer var observer = new MutationObserver(handleMutations); // Start observing the 'search' div and its descendants var searchDiv = document.getElementById('search'); if (searchDiv) { observer.observe(searchDiv, { childList: true, subtree: true }); } // Hide existing elements with class "C4clhf" hideElementWithClass("C4clhf"); if ((document.querySelector('div.card-section a[href*="&filter=0"]') !== null) || (document.querySelectorAll('div.card-section p, div.card-section li').length > 1) || (document.querySelector('div.uzjuFc') !== null)) { if (pageNumber === 1) { // Remove the 'return-pagination' table if pageNumber is 1 var returnPaginationTable = document.querySelector('table.AaVjTc.return-pagination'); if (returnPaginationTable) { returnPaginationTable.remove(); } } else { // Find and remove the column ret-pag-col-11 var column11 = table.querySelector('.ret-pag-col-11'); if (column11) { column11.remove(); } // Remove numbers and links from columns ret-pag-col-2 to ret-pag-col-10 for (var i = 2; i <= 10; i++) { var column = table.querySelector(`.ret-pag-col-${i}`); column.innerHTML = ''; } // Set the current page number in ret-pag-col-10 var column10 = table.querySelector('.ret-pag-col-10'); column10.innerText = pageNumber; // Generate and set the page numbers in the remaining columns as links for (var i = 9; i >= 2; i--) { var column = table.querySelector(`.ret-pag-col-${i}`); var columnNumber = pageNumber - (10 - i); if (columnNumber > 0) { var linkURL = getCurrentPageURL(); var newStartNumber = (columnNumber - 1) * 10; linkURL = replaceStartNumber(linkURL, newStartNumber); column.innerHTML = generateLink(columnNumber, linkURL); } else { column.remove(); } } } // Function to get the current page URL function getCurrentPageURL() { return window.location.href.split("#")[0]; } // Function to replace the "start" number in the URL function replaceStartNumber(url, newStartNumber) { return url.replace(/([&?])start=\d+/, "$1start=" + newStartNumber); } // Function to generate a link with the specified page number and URL function generateLink(pageNumber, url) { return `${pageNumber}`; } }