Better Google

Don't be evil::revert google search results to older style

当前为 2021-02-25 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Better Google
  3. // @namespace google
  4. // @version 0.1.15.2
  5. // @description Don't be evil::revert google search results to older style
  6. // @author aligo, adambh, tejaslodaya, drwonky
  7. // @license MIT
  8. // @homepageURL https://github.com/drwonky/better-google
  9. // @match https://*.google.com/search?*
  10. // @include /^https?://(?:www|encrypted|ipv[46])\.google\.[^/]+/(?:$|[#?]|search|webhp)/
  11. // @grant none
  12. // @run-at document-start
  13. // ==/UserScript==
  14.  
  15. (function() {
  16. 'use strict';
  17.  
  18. var betterGoogleRow = function(el) {
  19. var tbwUpd = el.querySelectorAll('.TbwUpd');
  20. var aboutResult = el.querySelectorAll('.csDOgf');
  21. if (tbwUpd.length > 0) {
  22. var linkEl = el.querySelector('a');
  23. var addEl = linkEl.nextSibling;
  24.  
  25. var betterAddEl = document.createElement('div');
  26. betterAddEl.className = 'btrAdd';
  27.  
  28. if (addEl) {
  29. for (var i = 0; i < addEl.children.length; i++) {
  30. var _el = addEl.children[i];
  31. if (_el.className.indexOf('TbwUpd') == -1) {
  32. betterAddEl.appendChild(_el);
  33. }
  34. }
  35. }
  36.  
  37. var betterEl = document.createElement('div');
  38. betterEl.className = 'btrG';
  39. betterEl.appendChild(betterAddEl);
  40.  
  41. el.appendChild(betterEl);
  42.  
  43. var urlEl = document.createElement('a');
  44. urlEl.href = linkEl.href;
  45. urlEl.target = '_blank';
  46. urlEl.className = 'btrLink';
  47.  
  48. var urlCiteEl = document.createElement('cite');
  49. urlCiteEl.innerText = linkEl.href;
  50. urlCiteEl.className = 'iUh30 bc';
  51. urlEl.appendChild(urlCiteEl);
  52.  
  53.  
  54. var maxWidth = el.clientWidth - betterAddEl.offsetWidth - 10;
  55.  
  56. betterEl.insertBefore(urlEl, betterAddEl);
  57. if (urlEl.offsetWidth > maxWidth) {
  58. urlEl.style.width = maxWidth.toString() + 'px';
  59. }
  60.  
  61. betterEl.appendChild(aboutResult[0]);
  62.  
  63. tbwUpd.forEach(function(el) { el.remove() });
  64. linkEl.querySelector('br:first-child').remove();
  65. }
  66. }
  67.  
  68. var prevResultCount = 0;
  69. var bettered = false;
  70.  
  71. var runBetterGoogle = function() {
  72. if (prevResultCount != document.querySelectorAll('.g .yuRUbf').length) {
  73. document.querySelectorAll('.g .yuRUbf').forEach(betterGoogleRow);
  74. prevResultCount = document.querySelectorAll('.g .yuRUbf').length;
  75. }
  76. if ( !bettered ) {
  77. if ( MutationObserver != undefined ) {
  78. var searchEl = document.getElementById('rcnt');
  79. var observer = new MutationObserver(runBetterGoogle);
  80. observer.observe(searchEl, {childList: true, subtree: true});
  81. }
  82. bettered = true;
  83. }
  84. };
  85.  
  86. var prepareStyleSheet = function() {
  87. var style = document.createElement('style');
  88. style.setAttribute('media', 'screen');
  89. style.appendChild(document.createTextNode(''));
  90. document.head.appendChild(style);
  91. style.sheet.insertRule('.btrG { word-break: break-all; line-height: 18px; }');
  92. style.sheet.insertRule('.btrG .btrAdd { display: inline-block; vertical-align: top; }');
  93. 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; }');
  94. style.sheet.insertRule('.btrG .btrLink cite.iUh30 { color: #006621; font-size: 16px; }');
  95. };
  96.  
  97. var checkElementThenRun = function(selector, func) {
  98. var el = document.querySelector(selector);
  99. if ( el == null ) {
  100. if (window.requestAnimationFrame != undefined) {
  101. window.requestAnimationFrame(function(){ checkElementThenRun(selector, func)});
  102. } else {
  103. document.addEventListener('readystatechange', function(e) {
  104. if (document.readyState == 'complete') {
  105. func();
  106. }
  107. });
  108. }
  109. } else {
  110. func();
  111. }
  112. }
  113.  
  114. checkElementThenRun('head', prepareStyleSheet);
  115. checkElementThenRun('#rcnt', runBetterGoogle);
  116. })();