Google Search Classic Navbar

Restore the garbage UX nav bar.

  1. // ==UserScript==
  2. // @name Google Search Classic Navbar
  3. // @version 0.2.6
  4. // @author yakisova41
  5. // @license MIT
  6. // @namespace https://yakisova.com
  7. // @description Restore the garbage UX nav bar.
  8. // @match https://www.google.com/*
  9. // @match https://www.google.co.jp/*
  10. // @grant unsafeWindow
  11. // @run-at document-start
  12. // @name:ja Google検索の上のメニューを元に戻す
  13. // @description:ja Google検索の上のメニューを従来のデザインに無理やり戻します。
  14. // @icon data:image/png;base64,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
  15. // ==/UserScript==
  16.  
  17. // src/classes/NavBarItems.ts
  18. var NavBarItems = class {
  19. parentElement;
  20. tbmList = {
  21. all: "All",
  22. isch: "Images",
  23. vid: "Videos",
  24. nws: "News",
  25. shop: "Shop"
  26. };
  27. thisTbm = "all";
  28. items = [];
  29. itemContainerClassName = "navbar-item-container";
  30. itemIconOuterClassName = "navbar-item-icon-outer";
  31. setTbm(tbm) {
  32. this.thisTbm = tbm;
  33. }
  34. setParentElement(elem) {
  35. if (elem !== void 0 && elem !== null) {
  36. this.parentElement = elem;
  37. this.parentElement.classList.add("navbar-parent");
  38. }
  39. }
  40. render() {
  41. this.items.forEach(({ type, itemElem, matchTbm, activeElem }) => {
  42. if (type === "match-active" && matchTbm === this.thisTbm && activeElem !== void 0) {
  43. this.parentElement.appendChild(activeElem);
  44. }
  45. if (type === "match-active" && matchTbm !== this.thisTbm) {
  46. this.parentElement.appendChild(itemElem);
  47. }
  48. if (type === "item") {
  49. this.parentElement.appendChild(itemElem);
  50. }
  51. });
  52. }
  53. appendItem(itemElem) {
  54. this.items.push({
  55. type: "item",
  56. itemElem
  57. });
  58. }
  59. appendTbmActiveItem(matchTbm, itemElem, activeElem) {
  60. this.items.push({
  61. type: "match-active",
  62. matchTbm,
  63. itemElem,
  64. activeElem
  65. });
  66. }
  67. createItemElem(text, iconElem, isLink = false, href = "") {
  68. const itemContainer = document.createElement("div");
  69. itemContainer.className = this.itemContainerClassName;
  70. if (isLink) {
  71. const linkElem = document.createElement("a");
  72. linkElem.setAttribute("href", href);
  73. const iconOuter = document.createElement("span");
  74. iconOuter.appendChild(iconElem);
  75. iconOuter.className = this.itemIconOuterClassName;
  76. linkElem.appendChild(iconOuter);
  77. linkElem.innerHTML = exportedTrustedPolicy.createHTML(
  78. linkElem.innerHTML + text
  79. );
  80. itemContainer.appendChild(linkElem);
  81. itemContainer.classList.add("navbar-link-item");
  82. } else {
  83. const iconOuter = document.createElement("span");
  84. iconOuter.className = this.itemIconOuterClassName;
  85. iconOuter.appendChild(iconElem);
  86. itemContainer.appendChild(iconOuter);
  87. itemContainer.innerHTML = exportedTrustedPolicy.createHTML(
  88. itemContainer.innerHTML + text
  89. );
  90. itemContainer.classList.add("navbar-now-item");
  91. }
  92. return itemContainer;
  93. }
  94. };
  95.  
  96. // src/classes/Search.ts
  97. var Search = class {
  98. search;
  99. constructor(search) {
  100. this.search = search;
  101. }
  102. parse() {
  103. const searches = {};
  104. this.search.split("&").forEach((v) => {
  105. const sp = v.split("=");
  106. const key = sp[0].replace("?", "");
  107. searches[key] = sp[1];
  108. });
  109. return searches;
  110. }
  111. decord(searches) {
  112. let searchResult = "?";
  113. Object.keys(searches).forEach((key) => {
  114. searchResult = searchResult + `${key}=${searches[key]}&`;
  115. });
  116. searchResult.slice(0, -1);
  117. return searchResult;
  118. }
  119. getURL() {
  120. const url = new URL(location.href);
  121. url.search = this.search;
  122. return url.toString();
  123. }
  124. reload() {
  125. const url = new URL(location.href);
  126. url.search = this.search;
  127. location.href = url.toString();
  128. }
  129. append(key, val) {
  130. const parsed = this.parse();
  131. parsed[key] = val;
  132. this.search = this.decord(parsed);
  133. }
  134. delete(key) {
  135. const parsed = this.parse();
  136. delete parsed[key];
  137. this.search = this.decord(parsed);
  138. }
  139. get(key) {
  140. const parsed = this.parse();
  141. return parsed[key];
  142. }
  143. };
  144.  
  145. // src/classes/StyleIncject.ts
  146. var StyleInject = class {
  147. tbm;
  148. styles = {};
  149. setTbm(tbm) {
  150. this.tbm = tbm;
  151. }
  152. inject() {
  153. const elem = document.createElement("style");
  154. if (this.styles[this.tbm] !== void 0) {
  155. elem.innerHTML = exportedTrustedPolicy.createHTML(
  156. this.styles[this.tbm].join("")
  157. );
  158. }
  159. if (this.styles["*"] !== void 0) {
  160. elem.innerHTML = exportedTrustedPolicy.createHTML(
  161. elem.innerHTML + this.styles["*"].join("")
  162. );
  163. }
  164. const head = document.head;
  165. if (head === null) {
  166. const i = setInterval(() => {
  167. if (document.head !== null) {
  168. document.head.appendChild(elem);
  169. clearInterval(i);
  170. }
  171. }, 100);
  172. } else {
  173. document.head.appendChild(elem);
  174. }
  175. }
  176. addStyle(tbms, style) {
  177. tbms.forEach((tbm) => {
  178. if (this.styles[tbm] === void 0) {
  179. this.styles[tbm] = [];
  180. }
  181. this.styles[tbm].push(style.replaceAll(" ", "").replaceAll("\n", ""));
  182. });
  183. }
  184. injectOnLoad(tbms, callback) {
  185. document.addEventListener("DOMContentLoaded", () => {
  186. let isInject = false;
  187. tbms.forEach((tbm) => {
  188. if (tbm === "*") {
  189. isInject = true;
  190. }
  191. if (tbm === this.tbm) {
  192. isInject = true;
  193. }
  194. });
  195. if (isInject) {
  196. const elem = document.createElement("style");
  197. elem.innerHTML = exportedTrustedPolicy.createHTML(
  198. callback().replaceAll(" ", "").replaceAll("\n", "")
  199. );
  200. document.head.appendChild(elem);
  201. }
  202. });
  203. }
  204. };
  205.  
  206. // src/icons.ts
  207. var paths = {
  208. all: `<path d="M16.32 14.88a8.04 8.04 0 1 0-1.44 1.44l5.76 5.76 1.44-1.44-5.76-5.76zm-6.36 1.08c-3.36 0-6-2.64-6-6s2.64-6 6-6 6 2.64 6 6-2.64 6-6 6"></path>`,
  209. isch: `<path d="M14 13l4 5H6l4-4 1.79 1.78L14 13zm-6.01-2.99A2 2 0 0 0 8 6a2 2 0 0 0-.01 4.01zM22 5v14a3 3 0 0 1-3 2.99H5c-1.64 0-3-1.36-3-3V5c0-1.64 1.36-3 3-3h14c1.65 0 3 1.36 3 3zm-2.01 0a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h7v-.01h7a1 1 0 0 0 1-1V5"></path>`,
  210. vid: `<path d="M10 16.5l6-4.5-6-4.5v9zM5 20h14a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1zm14.5 2H5a3 3 0 0 1-3-3V4.4A2.4 2.4 0 0 1 4.4 2h15.2A2.4 2.4 0 0 1 22 4.4v15.1a2.5 2.5 0 0 1-2.5 2.5"></path>`,
  211. maps: `<path d="M7.503 0c3.09 0 5.502 2.487 5.502 5.427 0 2.337-1.13 3.694-2.26 5.05-.454.528-.906 1.13-1.358 1.734-.452.603-.754 1.508-.98 1.96-.226.452-.377.829-.904.829-.528 0-.678-.377-.905-.83-.226-.451-.527-1.356-.98-1.959-.452-.603-.904-1.206-1.356-1.734C3.132 9.121 2 7.764 2 5.427 2 2.487 4.412 0 7.503 0zm0 1.364c-2.283 0-4.14 1.822-4.14 4.063 0 1.843.86 2.873 1.946 4.177.468.547.942 1.178 1.4 1.79.34.452.596.99.794 1.444.198-.455.453-.992.793-1.445.459-.61.931-1.242 1.413-1.803 1.074-1.29 1.933-2.32 1.933-4.163 0-2.24-1.858-4.063-4.139-4.063zm0 2.734a1.33 1.33 0 11-.001 2.658 1.33 1.33 0 010-2.658"></path>`,
  212. nws: `<path d="M12 11h6v2h-6v-2zm-6 6h12v-2H6v2zm0-4h4V7H6v6zm16-7.22v12.44c0 1.54-1.34 2.78-3 2.78H5c-1.64 0-3-1.25-3-2.78V5.78C2 4.26 3.36 3 5 3h14c1.64 0 3 1.25 3 2.78zM19.99 12V5.78c0-.42-.46-.78-1-.78H5c-.54 0-1 .36-1 .78v12.44c0 .42.46.78 1 .78h14c.54 0 1-.36 1-.78V12zM12 9h6V7h-6v2"></path>`,
  213. shop: `<path d="M21.11 2.89A3.02 3.02 0 0 0 18.95 2h-5.8c-.81 0-1.58.31-2.16.89L7.25 6.63 2.9 10.98a3.06 3.06 0 0 0 0 4.32l5.79 5.8a3.05 3.05 0 0 0 4.32.01l8.09-8.1c.58-.58.9-1.34.9-2.16v-5.8c0-.81-.32-1.59-.89-2.16zM20 10.85c0 .28-.12.54-.32.74l-3.73 3.74-4.36 4.36c-.41.41-1.08.41-1.49 0l-2.89-2.9-2.9-2.9a1.06 1.06 0 0 1 0-1.49l8.1-8.1c.2-.2.46-.3.74-.3l5.8-.01A1.05 1.05 0 0 1 20 5.05v5.8zM16 6c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2" style="transform-origin:0px 0px;"></path>`,
  214. more: `<path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" style="transform-origin:0px 0px;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);"></path>`,
  215. bks: `<path d="M0 0h24v24H0V0z" fill="none"></path><path d="M18 2H6a2 2 0 0 0-2 2v16c0 1.1.9 2 2 2h12a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm0 18H6V4h2v8l2.5-1.5L13 12V4h5v16z"></path>`,
  216. flm: `<path d="M0 0h24v24H0V0z" fill="none"></path><path d="M12.98 12.89l-4.03 4.03.42 2.95L8.24 21l-1.87-3.37L3 15.76l1.12-1.12 2.95.42 4.03-4.03L3 6.77l1.5-1.5 10.04 2.32 4.2-4.2a1.32 1.32 0 0 1 1.87 0c.52.52.52 1.36 0 1.87l-4.2 4.2 2.32 10.04-1.5 1.5-4.25-8.11z"></path>`,
  217. fin: `<path d="M0 0h24v24H0V0z" fill="none"></path><path clip-rule="evenodd" d="M6 15.5l-3 2.94V10h3v5.5zm5-1.84l-1.57-1.34L8 13.64V6h3v7.66zM16 12l-3 3V2h3v10zm2.81-.19L17 10h5v5l-1.79-1.79L13 20.36l-3.47-3.02L5.75 21H3l6.47-6.34L13 17.64l5.81-5.83z" fill-rule="evenodd"></path>`
  218. };
  219. var enablePaths = {
  220. all: `<path fill="#34a853" d="M10 2v2a6 6 0 0 1 6 6h2a8 8 0 0 0-8-8"></path><path fill="#ea4335" d="M10 4V2a8 8 0 0 0-8 8h2c0-3.3 2.7-6 6-6"></path><path fill="#fbbc04" d="M4 10H2a8 8 0 0 0 8 8v-2c-3.3 0-6-2.69-6-6"></path><path fill="#4285f4" d="M22 20.59l-5.69-5.69A7.96 7.96 0 0 0 18 10h-2a6 6 0 0 1-6 6v2c1.85 0 3.52-.64 4.88-1.68l5.69 5.69L22 20.59"></path>`,
  221. shop: `<path d="M8.65 8.04l-1.4-1.41 3.74-3.74c.58-.58 1.35-.89 2.16-.89h5.8c.82 0 1.58.31 2.16.89L19.69 4.3c-.2-.2-.47-.31-.74-.31l-5.8.01c-.28 0-.54.1-.74.3L8.65 8.04" fill="#ea4335" style="fill:rgb(234, 67, 53);transform-origin:0px 0px;"></path><path d="M5.8 18.2l-2.9-2.9c-1.19-1.19-1.19-3.12 0-4.32l4.36-4.36 1.4 1.41-4.35 4.37c-.41.41-.41 1.08 0 1.49l2.9 2.9L5.8 18.2" fill="#fbbc05" style="fill:rgb(251, 188, 5);transform-origin:0px 0px;"></path><path d="M21.11 2.89L19.69 4.3c.21.21.31.48.31.75v5.8c0 .28-.12.54-.32.74l-3.73 3.74-4.36 4.36c-.41.41-1.08.41-1.49 0l-2.89-2.9L5.8 18.2l2.89 2.9c.6.6 1.38.9 2.16.9.78 0 1.56-.29 2.16-.89l4.36-4.36 3.73-3.74c.58-.58.9-1.34.9-2.16v-5.8c0-.81-.32-1.59-.89-2.16" fill="#4285f4" style="fill:rgb(66, 133, 244);transform-origin:0px 0px;"></path><circle cx="16" cy="8" fill="#34a853" r="2" style="cx:16px;cy:8px;fill:rgb(52, 168, 83);r:2px;transform-origin:0px 0px;"></circle>`,
  222. isch: `<path clip-rule="evenodd" d="M0 0h24v24H0z" fill="none" style="clip-rule:evenodd;fill:none;transform-origin:0px 0px;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);"></path><path clip-rule="evenodd" d="M19 22h-7v-2h7c.55 0 1-.46 1-1V5a1 1 0 0 0-1-.99L12 4V2h7c1.66 0 3 1.36 3 3v14c0 1.65-1.35 3-3 3" fill="#4285F4" fill-rule="evenodd" style="clip-rule:evenodd;fill:rgb(66, 133, 244);fill-rule:evenodd;transform-origin:0px 0px;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);"></path><path clip-rule="evenodd" d="M12 22H5c-1.64 0-3-1.36-3-3V5c0-1.64 1.36-3 3-3h7v2H5c-.55 0-.99.45-.99 1L4 19c0 .55.45 1 1 1h7v2z" fill="#EA4335" fill-rule="evenodd" style="clip-rule:evenodd;fill:rgb(234, 67, 53);fill-rule:evenodd;transform-origin:0px 0px;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);"></path><path clip-rule="evenodd" d="M14 13l-2.25 2.75L10 14l-4 4h12z" fill="#34A853" fill-rule="evenodd" style="clip-rule:evenodd;fill:rgb(52, 168, 83);fill-rule:evenodd;transform-origin:0px 0px;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);"></path><path clip-rule="evenodd" d="M10 8c0 1.1-.9 2-2 2s-2-.9-2-2c0-1.09.9-2 2-2s2 .9 2 2" fill="#FBBC04" fill-rule="evenodd" style="clip-rule:evenodd;fill:rgb(251, 188, 4);fill-rule:evenodd;transform-origin:0px 0px;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);"></path>`,
  223. vid: `<path d="M10 16.5l6-4.5-6-4.5" fill="#4285f4" style="fill:rgb(66, 133, 244);transform-origin:0px 0px;"></path><path d="M20 12h2v7.5a2.5 2.5 0 0 1-2.5 2.5H12v-2h7a1 1 0 0 0 1-1v-7" fill="#ea4335" style="fill:rgb(234, 67, 53);transform-origin:0px 0px;"></path><path d="M20 12V5a1 1 0 0 0-1-1h-7V2h7.6A2.4 2.4 0 0 1 22 4.4V12h-2" fill="#fbbc04" style="fill:rgb(251, 188, 4);transform-origin:0px 0px;"></path><path d="M12 20v2H5a3 3 0 0 1-3-3V4.4A2.4 2.4 0 0 1 4.4 2H12v2H5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h7" fill="#34a853" style="fill:rgb(52, 168, 83);transform-origin:0px 0px;"></path>`,
  224. nws: `<path d="M6 7h4.072v6.588H6z" style="fill:#4285f4;stroke:none;stroke-width:13.6025;stroke-linecap:square;paint-order:stroke fill markers;fill-opacity:1"></path><path d="M12 7h6v2h-6zM12 11h6v2h-6zM6 15h12v2H6z" style="fill:#4285f4;fill-opacity:1;stroke:none;stroke-width:13.6025;stroke-linecap:square;paint-order:stroke fill markers"></path><path d="M12 19h7c.616-.054.941-.32 1-.78l.005-4.632H22v4.632c.004.765-.348 1.617-1.177 2.21-.605.434-1.083.57-1.823.57h-7v-2" style="fill:#34a853;fill-opacity:1;stroke:none;stroke-width:13.6025;stroke-linecap:square;paint-order:stroke fill markers"></path><path d="M20.005 13.588 19.99 5.78c-.054-.468-.394-.723-1-.78h-6.997l-.005-2H19c.712-.005 1.421.218 2.127.827.53.507.856 1.136.873 1.953v7.808h-1.995" style="fill:#4285f4;fill-opacity:1;stroke:none;stroke-width:13.6025;stroke-linecap:square;paint-order:stroke fill markers"></path><path d="M12 19H5c-.616-.054-.941-.32-1-.78l-.005-4.632H2v4.632c-.004.765.348 1.617 1.177 2.21.605.434 1.083.57 1.823.57h7v-2" style="fill:#fbbc04;fill-opacity:1;stroke:none;stroke-width:13.6025;stroke-linecap:square;paint-order:stroke fill markers"></path><path d="M3.995 13.588 4.01 5.78c.054-.468.393-.723.998-.78h6.985l-.005-2h-6.99c-.71-.005-1.419.218-2.123.827-.53.507-.855 1.136-.872 1.953v7.808h1.992" style="fill:#ea4335;fill-opacity:1;stroke:none;stroke-width:13.5923;stroke-linecap:square;paint-order:stroke fill markers"></path>`,
  225. bks: `<path d="M6 20v-8H4v8c0 1.1.9 2 2 2h6v-2H6" fill="#fbbc04" style="fill:rgb(251, 188, 4);transform-origin:0px 0px;"></path><path d="M18 20h-6v2h6a2 2 0 0 0 2-2v-8h-2v8" fill="#34a853" style="fill:rgb(52, 168, 83);transform-origin:0px 0px;"></path><path d="M18 2h-5v2h5v8h2V4a2 2 0 0 0-2-2" fill="#ea4335" style="fill:rgb(234, 67, 53);transform-origin:0px 0px;"></path><path d="M6 2a2 2 0 0 0-2 2v8h2V4h2v8l2.5-1.5L13 12V2H6" fill="#4285f4" style="fill:rgb(66, 133, 244);transform-origin:0px 0px;"></path>`
  226. };
  227. function getIconSvgElement(path, viewBox = "0 0 24 24") {
  228. const svg = document.createElement("svg");
  229. svg.setAttribute("viewBox", viewBox);
  230. svg.innerHTML = exportedTrustedPolicy.createHTML(path);
  231. return svg;
  232. }
  233.  
  234. // src/lang.ts
  235. var langList = {
  236. All: {
  237. ja: "\u3059\u3079\u3066",
  238. de: "Alle",
  239. es: "Todo",
  240. fr: "Tous",
  241. ko: "\uC804\uCCB4",
  242. zh: "\u5168\u90E8"
  243. },
  244. Images: {
  245. ja: "\u753B\u50CF",
  246. de: "Bilder",
  247. es: "Im\xE1genes",
  248. ko: "\uC774\uBBF8\uC9C0",
  249. zh: "\u56FE\u7247"
  250. },
  251. Videos: {
  252. ja: "\u52D5\u753B",
  253. fr: "Vid\xE9os",
  254. ko: "\uB3D9\uC601\uC0C1",
  255. zh: "\u89C6\u9891"
  256. },
  257. Maps: {
  258. ja: "\u5730\u56F3",
  259. ko: "\uC9C0\uB3C4",
  260. zh: "\u5730\u56FE"
  261. },
  262. News: {
  263. ja: "\u30CB\u30E5\u30FC\u30B9",
  264. es: "Noticias",
  265. fr: "Actualit\xE9s",
  266. ko: "\uB274\uC2A4",
  267. zh: "\u65B0\u95FB"
  268. },
  269. Shopping: {
  270. ja: "\u30B7\u30E7\u30C3\u30D4\u30F3\u30B0",
  271. ko: "\uC1FC\uD551",
  272. zh: "\u8D2D\u7269"
  273. },
  274. Books: {
  275. ja: "\u66F8\u7C4D",
  276. de: "B\xFCcher",
  277. es: "Libros",
  278. fr: "Livres",
  279. ko: "\uC1FC\uD551",
  280. zh: "\u56FE\u4E66"
  281. }
  282. };
  283. function translate(text) {
  284. const lang = navigator.language;
  285. if (langList[text][lang] !== void 0) {
  286. return langList[text][lang];
  287. } else {
  288. return text;
  289. }
  290. }
  291.  
  292. // src/registerNavItems.ts
  293. function registerNavItems(itemsDom) {
  294. itemsDom.appendTbmActiveItem(
  295. "all",
  296. itemsDom.createItemElem(
  297. translate("All"),
  298. getIconSvgElement(paths.all),
  299. true,
  300. createAllUrl()
  301. ),
  302. itemsDom.createItemElem(
  303. translate("All"),
  304. getIconSvgElement(enablePaths.all),
  305. false
  306. )
  307. );
  308. itemsDom.appendTbmActiveItem(
  309. "isch",
  310. itemsDom.createItemElem(
  311. translate("Images"),
  312. getIconSvgElement(paths.isch),
  313. true,
  314. createTbmUrl("isch")
  315. ),
  316. itemsDom.createItemElem(
  317. translate("Images"),
  318. getIconSvgElement(enablePaths.isch),
  319. false
  320. )
  321. );
  322. itemsDom.appendTbmActiveItem(
  323. "vid",
  324. itemsDom.createItemElem(
  325. translate("Videos"),
  326. getIconSvgElement(paths.vid),
  327. true,
  328. createTbmUrl("vid")
  329. ),
  330. itemsDom.createItemElem(
  331. translate("Videos"),
  332. getIconSvgElement(enablePaths.vid),
  333. false
  334. )
  335. );
  336. itemsDom.appendItem(
  337. itemsDom.createItemElem(
  338. translate("Maps"),
  339. getIconSvgElement(paths.maps, "0 0 16 16"),
  340. true,
  341. createMapUrl()
  342. )
  343. );
  344. itemsDom.appendTbmActiveItem(
  345. "nws",
  346. itemsDom.createItemElem(
  347. translate("News"),
  348. getIconSvgElement(paths.nws),
  349. true,
  350. createTbmUrl("nws")
  351. ),
  352. itemsDom.createItemElem(
  353. translate("News"),
  354. getIconSvgElement(enablePaths.nws),
  355. false
  356. )
  357. );
  358. itemsDom.appendTbmActiveItem(
  359. "shop",
  360. itemsDom.createItemElem(
  361. translate("Shopping"),
  362. getIconSvgElement(paths.shop),
  363. true,
  364. createTbmUrl("shop")
  365. ),
  366. itemsDom.createItemElem(
  367. translate("Shopping"),
  368. getIconSvgElement(enablePaths.shop),
  369. false
  370. )
  371. );
  372. itemsDom.appendTbmActiveItem(
  373. "bks",
  374. itemsDom.createItemElem(
  375. translate("Books"),
  376. getIconSvgElement(paths.bks),
  377. true,
  378. createTbmUrl("bks")
  379. ),
  380. itemsDom.createItemElem(
  381. translate("Books"),
  382. getIconSvgElement(enablePaths.bks),
  383. false
  384. )
  385. );
  386. }
  387. function createAllUrl() {
  388. const search = new Search(location.search);
  389. search.delete("tbm");
  390. return search.getURL();
  391. }
  392. function createTbmUrl(tbm) {
  393. const search = new Search(location.search);
  394. search.append("tbm", tbm);
  395. return search.getURL();
  396. }
  397. function createMapUrl() {
  398. const search = new Search(location.search);
  399. const q = search.get("q");
  400. return "https://www.google.com/maps/?q=" + q;
  401. }
  402.  
  403. // src/registerStyle.ts
  404. function registerStyle(styleInjecter) {
  405. styleInjecter.addStyle(
  406. ["all"],
  407. `
  408. .navbar-item-container {
  409. padding: 14px 12px 12px 10px!important;
  410. }
  411. `
  412. );
  413. styleInjecter.addStyle(
  414. ["all", "vid", "nws", "bks"],
  415. `
  416. .main > div:nth-child(1) > div:nth-child(1) {
  417. height: 45px;
  418. }
  419.  
  420. .google-classic-navbar-parent-outer > div:nth-child(1) {
  421. padding-left: 0;
  422. height: 43px;
  423. }
  424.  
  425.  
  426. .google-classic-navbar-parent-outer > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) {
  427. align-items: center;
  428. }
  429.  
  430.  
  431. .main > div:nth-child(1) > div:nth-child(3) > div:nth-child(1) {
  432. padding-left: 0;
  433. height: 43p;
  434. }
  435.  
  436.  
  437. .main > div:nth-child(1) > div:nth-child(3) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) {
  438. align-items: center;
  439. }
  440.  
  441. .main > div:nth-child(1) > div:nth-child(3) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > .navbar-item-container {
  442. margin: 9px 1px 0!important;
  443. }
  444.  
  445. @media (min-width: 1124px) and (max-width: 1300px){
  446. .srp {
  447. --center-abs-margin: 30px!important;
  448. }
  449. }
  450. @media (min-width: 1410px) and (max-width: 1610px) {
  451. .srp {
  452. --center-abs-margin: 180px!important;
  453. }
  454. }
  455. @media (min-width: 1610px){
  456. .srp {
  457. --center-abs-margin: 180px!important;
  458. }
  459. }`
  460. );
  461. styleInjecter.addStyle(
  462. ["isch"],
  463. `
  464. body > div:nth-child(6) > c-wiz:nth-child(1) > div:nth-child(2) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) {
  465. height:59px;
  466. }
  467.  
  468. body > div:nth-child(6) > c-wiz:nth-child(1) > div:nth-child(2) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) {
  469. margin-left:0;
  470. }
  471. `
  472. );
  473. styleInjecter.addStyle(
  474. ["shop"],
  475. `
  476. #cnt > div:nth-child(1) {
  477. height: 45px;
  478. }
  479.  
  480. #cnt > div:nth-child(4) {
  481. padding: 23px 0 0px calc(var(--center-abs-margin) - 20px);
  482. }
  483.  
  484. #cnt > div:nth-child(4) > div:nth-child(2) {
  485. margin-left:0;
  486. }
  487. `
  488. );
  489. styleInjecter.addStyle(
  490. ["*"],
  491. `
  492. .navbar-parent {
  493. display: inline;
  494. margin-left: 169px;
  495. white-space: nowrap;
  496. color: #70757a;
  497. font-size: 13px;
  498. -webkit-user-select: none;
  499. }
  500. .navbar-now-item {
  501. border-bottom: 3px solid var(--classic-google-nav-bar-primary);
  502. color: var(--classic-google-nav-bar-primary);
  503. }
  504. .navbar-item-container {
  505. padding: 16px 12px 12px 10px;
  506. font-family: Google Sans,Roboto,HelveticaNeue,Arial,sans-serif;
  507. height: 16px;
  508. line-height: 16px;
  509. margin: 11px 1px 0;
  510. display: inline-block;
  511. font-size: 13px;
  512. }
  513. .navbar-item-icon-outer {
  514. display: inline-block;
  515. fill: currentColor;
  516. height: 16px;
  517. width: 16px;
  518. margin-right: 5px;
  519. vertical-align: text-bottom;
  520. }
  521. .navbar-now-item > navbar-item-icon-outer {
  522. fill: currentColor;
  523. }
  524. .navbar-item-container > a {
  525. text-decoration: none;
  526. color: var(--classic-google-nav-bar-text)!important;
  527. -webkit-tap-highlight-color: rgba(0,0,0,.10);
  528. }
  529. `
  530. );
  531. }
  532.  
  533. // src/theme.ts
  534. function attachTheme(styleInjecter) {
  535. styleInjecter.injectOnLoad(["*"], () => {
  536. const theme = getComputedStyle(document.body).backgroundColor === "rgb(32, 33, 36)" ? "dark" : "right";
  537. const styles = {
  538. dark: `
  539. :root {
  540. --classic-google-nav-bar-text:#bdc1c6;
  541. --classic-google-nav-bar-primary:#8ab4f8;
  542. }
  543. `,
  544. right: `
  545. :root {
  546. --classic-google-nav-bar-text:#202124;
  547. --classic-google-nav-bar-primary:#4285f4;
  548. }
  549. `
  550. };
  551. return styles[theme];
  552. });
  553. }
  554.  
  555. // src/index.ts
  556. function main() {
  557. const searchManager = new Search(location.search);
  558. const tbm = searchManager.get("tbm");
  559. const styleInjecter = new StyleInject();
  560. const itemsDom = new NavBarItems();
  561. if (tbm === void 0) {
  562. styleInjecter.setTbm("all");
  563. } else {
  564. styleInjecter.setTbm(tbm);
  565. }
  566. registerStyle(styleInjecter);
  567. attachTheme(styleInjecter);
  568. styleInjecter.inject();
  569. document.addEventListener("DOMContentLoaded", () => {
  570. const navbarNthChild = getNavbarNthChild();
  571. const navbarSelectors = {
  572. all: [
  573. `.main > div:nth-child(1) > div:nth-child(${navbarNthChild})`,
  574. ".main > div:nth-child(1) > div:nth-child(3)"
  575. ],
  576. isch: "body > div:nth-child(6) > c-wiz > div:nth-child(2)",
  577. vid: `.main > div:nth-child(1) > div:nth-child(${navbarNthChild})`,
  578. shop: "#main > div:nth-child(1) > div:nth-child(4)",
  579. bks: `.main > div:nth-child(1) > div:nth-child(9)`
  580. };
  581. const navbarItemsSelectors = {
  582. all: "div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1)",
  583. isch: "div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1)",
  584. vid: "div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2)",
  585. shop: "div:nth-child(2)"
  586. };
  587. switch (tbm) {
  588. case void 0: {
  589. const navbar = getElement(navbarSelectors.all);
  590. setUniqueSelector(navbar);
  591. const itemsParent = navbar?.querySelector(navbarItemsSelectors.all);
  592. removeOriginalItems(itemsParent);
  593. itemsDom.setParentElement(itemsParent);
  594. itemsDom.setTbm("all");
  595. break;
  596. }
  597. case "isch": {
  598. const navbar = document.querySelector(navbarSelectors.isch);
  599. const itemsParent = navbar?.querySelector(navbarItemsSelectors.isch);
  600. removeOriginalItems(itemsParent);
  601. itemsDom.setParentElement(itemsParent);
  602. itemsDom.setTbm("isch");
  603. break;
  604. }
  605. case "vid": {
  606. const navbar = document.querySelector(navbarSelectors.vid);
  607. setUniqueSelector(navbar);
  608. const itemsParent = navbar?.querySelector(navbarItemsSelectors.vid);
  609. removeOriginalItems(itemsParent);
  610. itemsDom.setParentElement(itemsParent);
  611. itemsDom.setTbm("vid");
  612. break;
  613. }
  614. case "shop": {
  615. const navbar = document.querySelector(navbarSelectors.shop);
  616. setUniqueSelector(navbar);
  617. const itemsParent = navbar?.querySelector(navbarItemsSelectors.shop);
  618. removeOriginalItems(itemsParent);
  619. itemsDom.setParentElement(itemsParent);
  620. itemsDom.setTbm("shop");
  621. break;
  622. }
  623. case "nws": {
  624. const navbar = getElement(navbarSelectors.all);
  625. setUniqueSelector(navbar);
  626. const itemsParent = navbar?.querySelector(navbarItemsSelectors.all);
  627. removeOriginalItems(itemsParent);
  628. itemsDom.setParentElement(itemsParent);
  629. itemsDom.setTbm("nws");
  630. break;
  631. }
  632. case "bks": {
  633. const navbar = document.querySelector(navbarSelectors.bks);
  634. setUniqueSelector(navbar);
  635. const itemsParent = navbar?.querySelector(navbarItemsSelectors.all);
  636. removeOriginalItems(itemsParent);
  637. itemsDom.setParentElement(itemsParent);
  638. itemsDom.setTbm("bks");
  639. break;
  640. }
  641. }
  642. registerNavItems(itemsDom);
  643. setTimeout(() => {
  644. itemsDom.render();
  645. });
  646. });
  647. }
  648. function removeOriginalItems(itemsParent) {
  649. if (itemsParent === null || itemsParent === void 0)
  650. return;
  651. const items = itemsParent.querySelectorAll("div, a, span");
  652. items.forEach((item) => {
  653. item.remove();
  654. });
  655. }
  656. function getElement(selectorsList) {
  657. let returnElem = null;
  658. selectorsList.forEach((selector) => {
  659. const elem = document.querySelector(selector);
  660. if (elem !== null && returnElem === null) {
  661. returnElem = elem;
  662. }
  663. });
  664. return returnElem;
  665. }
  666. function getNavbarNthChild() {
  667. let nthChild = 0;
  668. let isFound = false;
  669. const children = document.querySelectorAll("#main > #cnt > *");
  670. if (children !== void 0) {
  671. children.forEach((child, index) => {
  672. if (child?.querySelector(
  673. 'div[role="navigation"] > div > #abss-dropdown_1'
  674. ) !== null && !isFound) {
  675. nthChild = index + 1;
  676. isFound = true;
  677. }
  678. if (child?.querySelector(
  679. 'div[role="navigation"] > div[data-st-cnt="mode"] > div[data-st-tgt="mode"] > div[data-id="trc"]'
  680. ) !== null) {
  681. nthChild = index + 1;
  682. isFound = true;
  683. }
  684. });
  685. }
  686. return nthChild;
  687. }
  688. function setUniqueSelector(navbar) {
  689. if (navbar !== null) {
  690. navbar.classList.add("google-classic-navbar-parent-outer");
  691. }
  692. }
  693. var trustedPolicy;
  694. if (window.trustedTypes === void 0) {
  695. trustedPolicy = {
  696. createHTML: (input) => {
  697. return input;
  698. }
  699. };
  700. } else {
  701. trustedPolicy = window.trustedTypes.createPolicy(
  702. "google-classic-navbar-trusted-policy",
  703. {
  704. createHTML: (input) => {
  705. return input;
  706. }
  707. }
  708. );
  709. }
  710. var exportedTrustedPolicy = trustedPolicy;
  711.  
  712. // node_modules/ts-extension-builder/tmp/entry.ts
  713. var args = {};
  714. if (typeof GM_info !== "undefined" && GM_info.script.grant !== void 0) {
  715. GM_info.script.grant.forEach((propatyName) => {
  716. let keyName = propatyName.split("GM_")[1];
  717. if (keyName === "xmlhttpRequest") {
  718. keyName = "xmlHttpRequest";
  719. }
  720. args[propatyName] = GM[keyName];
  721. });
  722. }
  723. main(args);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址