Greasy Fork

Greasy Fork is available in English.

Return Pagination to Google

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

目前为 2023-06-15 提交的版本。查看 最新版本

// ==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");