Return Pagination to Google

Makes Google searches break down into separate pages, rather than displaying as one continuous page. (Quick & Dirty)

Versione datata 15/06/2023. Vedi la nuova versione l'ultima versione.

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==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.2
// @author      Jupiter Liar
// @license     Attribution CC BY
// @description 6/15/2023, 2:30 PM
// ==/UserScript==

// 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';
  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 {
        // Add page number with link
        var newStartValue = (columnNumber - 1) * 10;
        if (newStartValue === 0) {
          newStartValue = "0";
        }
        var linkHref;
        if (startIndex === -1) {
          linkHref = urlWithoutAnchor + startParam + newStartValue;
        } else {
          linkHref = urlWithoutAnchor.replace(startParam + startValue, startParam + newStartValue);
        }
        column.innerHTML = `<a href="${linkHref}">${columnNumber}</a>`;
      }
    }

    // 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 'body' element and its descendants
observer.observe(document.body, { childList: true, subtree: true });

// Hide existing elements with class "C4clhf"
hideElementWithClass("C4clhf");