您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Makes Google searches break down into separate pages, rather than displaying as one continuous page.
当前为
- // ==UserScript==
- // @name Return Pagination to Google
- // @description Makes Google searches break down into separate pages, rather than displaying as one continuous page.
- // @namespace Violentmonkey Scripts
- // @include https://www.google.*/search*
- // @match https://www.google.com/search*
- // @grant none
- // @version 1.5
- // @author Jupiter Liar
- // @license Attribution CC BY
- // @description 03/17/2024, 11:15 PM
- // ==/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;
- }
- var botstuffDiv = document.getElementById('botstuff');
- var footerElement = document.querySelector('footer');
- // Extract the page number from the URL
- var startParam = "&start=";
- var startIndex = window.location.href.indexOf(startParam);
- // Create a variable to store the page number
- var pageNumber;
- function generateTable() {
- // Create the table element
- var table = document.createElement('table');
- table.className = 'AaVjTc return-pagination';
- table.style.margin = 'auto';
- table.style.marginBottom = '28px';
- // table.style.scale = '80%';
- table.style.border = '1px solid hsla(0, 0%, 0%, 10%)';
- table.style.borderRadius = '1em';
- if (footerElement) {
- table.style.marginTop = '28px';
- }
- if (!botstuffDiv) {
- table.style.padding = '0.4em';
- } else {
- table.style.padding = '0 0.5em';
- }
- 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';
- column.style.minWidth = '16px';
- column.style.fontSize = '16pt';
- // Add padding to middle columns
- if (i > 0 && i < 10) {
- if (botstuffDiv) {
- column.style.padding = '0pt 6.4pt 0';
- } else {
- column.style.padding = '1pt 6.4pt 0';
- }
- }
- // Add padding to previous and next columns
- if (i === 0) {
- column.style.padding = '0 12.8pt 0 0';
- }
- if (i === 10) {
- column.style.padding = '0 0 0 12.8pt';
- }
- // 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 12.8pt 0 6.4pt'; // Changed from '0 8pt' to '0 16pt'
- previousSpan.style.fontSize = '22.4pt';
- 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 6.4pt 0 12.8pt'; // Changed from '0 8pt' to '0 16pt'
- nextSpan.style.fontSize = '22.4pt';
- 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 or the beginning of the footer element
- if (botstuffDiv) {
- botstuffDiv.appendChild(table);
- }
- if (footerElement) {
- footerElement.insertBefore(table, footerElement.firstChild);
- }
- }
- // Check if the page has the required conditions
- if ((botstuffDiv && !document.querySelector('table.AaVjTc')) || footerElement) {
- console.log('Attempting to generate table...');
- generateTable();
- }
- // ...
- // 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 `<a href="${url}">${pageNumber}</a>`;
- }
- }
- // Function to handle scaling and transforming the table
- function scaleTableToFit(tableContainerDiv) {
- var table = document.querySelector('.return-pagination');
- var viewportWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
- if (table.offsetWidth > tableContainerDiv.offsetWidth) {
- var scale = tableContainerDiv.offsetWidth / table.offsetWidth;
- table.style.transform = 'scale(' + scale + ')';
- table.style.transformOrigin = 'top left';
- } else {
- // Reset the table's scale and transform origin
- table.style.transform = '';
- table.style.transformOrigin = '';
- }
- }
- // Create a ResizeObserver instance
- var resizeObserver = new ResizeObserver(function(entries) {
- for (var entry of entries) {
- if (entry.target.id === 'botstuff') {
- tableContainerDiv = botstuffDiv;
- // Call the scaling function when #botstuff width changes
- scaleTableToFit(tableContainerDiv);
- console.log('Botstuff resizer in action.');
- break;
- }
- if (footerElement) {
- tableContainerDiv = footerElement;
- // Call the scaling function when <footer> width changes
- scaleTableToFit(tableContainerDiv);
- console.log('Footer resizer in action.');
- break;
- }
- }
- });
- // Observe changes in the width of #botstuff
- if (botstuffDiv) {
- resizeObserver.observe(botstuffDiv);
- }
- if (footerElement) {
- resizeObserver.observe(footerElement);
- }