Restore google search r###lts to older style with green link below title instead of link above title. Just tweaks the CSS and does some dynamic JS reordering of the DIVs.
// ==UserScript== // @name Better Google // @namespace google // @version 0.1.16.9 // @description Restore google search r###lts to older style with green link below title instead of link above title. Just tweaks the CSS and does some dynamic JS reordering of the DIVs. // @author aligo, adambh, tejaslodaya, drwonky, yut23 // @license MIT // @homepageURL https://github.com/aligo/better-google // @match https://*.google.com/search?* // @include /^https?://(?:www|encrypted|ipv[46])\.google\.[^/]+/(?:$|[#?]|search|webhp)/ // @grant none // @run-at document-start // ==/UserScript== (function() { 'use strict'; var betterGoogleRow = function(el) { var tbwUpd = el.querySelectorAll('.TbwUpd, .HGLrXd'); if (tbwUpd.length > 0) { /* Google does A/B testing on the search r###lts page, so the * structure of the page is not always the same. This code * tries to find the link element in a few different ways. * If it can't find it, it just gives up and doesn't do * anything. */ var selectors = [ '.yuRUbf > a', '.yuRUbf > div > a', '.yuRUbf > div > span > a', ]; for (const selector of selectors) { var linkEl = el.querySelector(selector); if (linkEl) { break; } } var addEl = linkEl.nextSibling; if (!addEl) { // try the parent's sibling, for the span case addEl = linkEl.parentElement.nextSibling; } var betterAddEl = document.createElement('div'); betterAddEl.className = 'btrAdd'; if (addEl) { // this loop moves the "More options" button into betterAddEl for (var i = 0; i < addEl.children.length; i++) { var _el = addEl.children[i]; if (_el.className.includes('TbwUpd') || _el.className.includes('HGLrXd')) { continue; } betterAddEl.appendChild(_el); } } else { // entry isn't fully loaded yet betterAddEl.remove(); return; } var betterEl = document.createElement('div'); betterEl.className = 'btrG'; betterEl.appendChild(betterAddEl); el.appendChild(betterEl); var urlEl = document.createElement('a'); urlEl.href = linkEl.href; urlEl.target = '_blank'; urlEl.className = 'btrLink'; var urlCiteEl = document.createElement('cite'); urlCiteEl.innerText = linkEl.href; urlCiteEl.className = 'iUh30 bc'; urlEl.appendChild(urlCiteEl); var maxWidth = el.clientWidth - betterAddEl.offsetWidth - 10; betterEl.insertBefore(urlEl, betterAddEl); if (urlEl.offsetWidth > maxWidth) { urlEl.style.width = maxWidth.toString() + 'px'; } var aboutR###lt = el.querySelectorAll('.csDOgf'); if (aboutR###lt.length > 0) { betterEl.appendChild(aboutR###lt[0]); } tbwUpd.forEach(function(el) { el.remove() }); linkEl.querySelector('br:first-child').remove(); } } var prevR###ltCount = 0; var bettered = false; var runBetterGoogle = function() { if (prevR###ltCount != document.querySelectorAll('.g .yuRUbf').length) { document.querySelectorAll('.g .yuRUbf').forEach(betterGoogleRow); prevR###ltCount = document.querySelectorAll('.g .yuRUbf').length; } if ( !bettered ) { if ( MutationObserver != undefined ) { var searchEl = document.getElementById('rcnt'); var observer = new MutationObserver(runBetterGoogle); observer.observe(searchEl, {childList: true, subtree: true}); } bettered = true; } }; var prepareStyleSheet = function() { // if dark mode is enabled (either manually or by device default), // Google adds a meta tag to the document which we can check var link_color = '#006621'; var meta_color_scheme = document.querySelector('meta[name="color-scheme"]'); if (meta_color_scheme != undefined && meta_color_scheme.content.includes('dark')) { // use a lighter green in dark mode link_color = '#40965b'; } var style = document.createElement('style'); style.setAttribute('media', 'screen'); style.appendChild(document.createTextNode('')); document.head.appendChild(style); style.sheet.insertRule(`:root { --btrG-link-color: ${link_color}; }`); style.sheet.insertRule('.btrG { word-break: normal; line-height: 18px; }'); style.sheet.insertRule('.btrG .btrAdd { display: inline-block; vertical-align: top; line-height: 0; }'); style.sheet.insertRule('.btrG .btrLink { display: inline-block; vertical-align: top; line-height: 18px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-decoration: none !important; color: var(--btrG-link-color); }'); style.sheet.insertRule('.btrG .btrLink cite.iUh30 { color: var(--btrG-link-color); font-size: 16px; }'); // remove extra space used for new multiline link info card style.sheet.insertRule('.yuRUbf h3.DKV0Md { margin-top: 0px; }'); }; var checkElementThenRun = function(selector, func) { var el = document.querySelector(selector); if ( el == null ) { if (window.requestAnimationFrame != undefined) { window.requestAnimationFrame(function(){ checkElementThenRun(selector, func)}); } else { document.addEventListener('readystatechange', function(e) { if (document.readyState == 'complete') { func(); } }); } } else { func(); } } checkElementThenRun('head', prepareStyleSheet); checkElementThenRun('#rcnt', runBetterGoogle); })();