// ==UserScript== // @name Google Search Classic Navbar // @version 0.2.3 // @author yakisova41 // @license MIT // @namespace https://yakisova.com // @description Restore the garbage UX nav bar. // @match https://www.google.com/* // @match https://www.google.co.jp/* // @grant unsafeWindow // @run-at document-start // @name:ja Google検索の上のメニューを元に戻す // @description:ja Google検索の上のメニューを従来のデザインに無理やり戻します。 // @icon data:image/png;base64,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 // @downloadURL none // ==/UserScript== // src/classes/NavBarItems.ts var NavBarItems = class { parentElement; tbmList = { all: "All", isch: "Images", vid: "Videos", nws: "News", shop: "Shop" }; thisTbm = "all"; items = []; itemContainerClassName = "navbar-item-container"; itemIconOuterClassName = "navbar-item-icon-outer"; setTbm(tbm) { this.thisTbm = tbm; } setParentElement(elem) { if (elem !== void 0 && elem !== null) { this.parentElement = elem; this.parentElement.classList.add("navbar-parent"); } } render() { this.items.forEach(({ type, itemElem, matchTbm, activeElem }) => { if (type === "match-active" && matchTbm === this.thisTbm && activeElem !== void 0) { this.parentElement.appendChild(activeElem); } if (type === "match-active" && matchTbm !== this.thisTbm) { this.parentElement.appendChild(itemElem); } if (type === "item") { this.parentElement.appendChild(itemElem); } }); } appendItem(itemElem) { this.items.push({ type: "item", itemElem }); } appendTbmActiveItem(matchTbm, itemElem, activeElem) { this.items.push({ type: "match-active", matchTbm, itemElem, activeElem }); } createItemElem(text, iconElem, isLink = false, href = "") { const itemContainer = document.createElement("div"); itemContainer.className = this.itemContainerClassName; if (isLink) { const linkElem = document.createElement("a"); linkElem.setAttribute("href", href); const iconOuter = document.createElement("span"); iconOuter.appendChild(iconElem); iconOuter.className = this.itemIconOuterClassName; linkElem.appendChild(iconOuter); linkElem.innerHTML = trustedPolicy.createHTML(linkElem.innerHTML + text); itemContainer.appendChild(linkElem); itemContainer.classList.add("navbar-link-item"); } else { const iconOuter = document.createElement("span"); iconOuter.className = this.itemIconOuterClassName; iconOuter.appendChild(iconElem); itemContainer.appendChild(iconOuter); itemContainer.innerHTML = trustedPolicy.createHTML( itemContainer.innerHTML + text ); itemContainer.classList.add("navbar-now-item"); } return itemContainer; } }; // src/classes/Search.ts var Search = class { search; constructor(search) { this.search = search; } parse() { const searches = {}; this.search.split("&").forEach((v) => { const sp = v.split("="); const key = sp[0].replace("?", ""); searches[key] = sp[1]; }); return searches; } decord(searches) { let searchResult = "?"; Object.keys(searches).forEach((key) => { searchResult = searchResult + `${key}=${searches[key]}&`; }); searchResult.slice(0, -1); return searchResult; } getURL() { const url = new URL(location.href); url.search = this.search; return url.toString(); } reload() { const url = new URL(location.href); url.search = this.search; location.href = url.toString(); } append(key, val) { const parsed = this.parse(); parsed[key] = val; this.search = this.decord(parsed); } delete(key) { const parsed = this.parse(); delete parsed[key]; this.search = this.decord(parsed); } get(key) { const parsed = this.parse(); return parsed[key]; } }; // src/classes/StyleIncject.ts var StyleInject = class { tbm; styles = {}; setTbm(tbm) { this.tbm = tbm; } inject() { const elem = document.createElement("style"); if (this.styles[this.tbm] !== void 0) { elem.innerHTML = trustedPolicy.createHTML(this.styles[this.tbm].join("")); } if (this.styles["*"] !== void 0) { elem.innerHTML = trustedPolicy.createHTML( elem.innerHTML + this.styles["*"].join("") ); } const head = document.head; if (head === null) { const i = setInterval(() => { if (document.head !== null) { document.head.appendChild(elem); clearInterval(i); } }, 100); } else { document.head.appendChild(elem); } } addStyle(tbms, style) { tbms.forEach((tbm) => { if (this.styles[tbm] === void 0) { this.styles[tbm] = []; } this.styles[tbm].push(style.replaceAll(" ", "").replaceAll("\n", "")); }); } injectOnLoad(tbms, callback) { document.addEventListener("DOMContentLoaded", () => { let isInject = false; tbms.forEach((tbm) => { if (tbm === "*") { isInject = true; } if (tbm === this.tbm) { isInject = true; } }); if (isInject) { const elem = document.createElement("style"); elem.innerHTML = trustedPolicy.createHTML( callback().replaceAll(" ", "").replaceAll("\n", "") ); document.head.appendChild(elem); } }); } }; // src/icons.ts var paths = { all: ``, isch: ``, vid: ``, maps: ``, nws: ``, shop: ``, more: ``, bks: ``, flm: ``, fin: `` }; var enablePaths = { all: ``, shop: ``, isch: ``, vid: ``, nws: ``, bks: `` }; function getIconSvgElement(path, viewBox = "0 0 24 24") { const svg = document.createElement("svg"); svg.setAttribute("viewBox", viewBox); svg.innerHTML = trustedPolicy.createHTML(path); return svg; } // src/lang.ts var langList = { All: { ja: "\u3059\u3079\u3066", de: "Alle", es: "Todo", fr: "Tous", ko: "\uC804\uCCB4", zh: "\u5168\u90E8" }, Images: { ja: "\u753B\u50CF", de: "Bilder", es: "Im\xE1genes", ko: "\uC774\uBBF8\uC9C0", zh: "\u56FE\u7247" }, Videos: { ja: "\u52D5\u753B", fr: "Vid\xE9os", ko: "\uB3D9\uC601\uC0C1", zh: "\u89C6\u9891" }, Maps: { ja: "\u5730\u56F3", ko: "\uC9C0\uB3C4", zh: "\u5730\u56FE" }, News: { ja: "\u30CB\u30E5\u30FC\u30B9", es: "Noticias", fr: "Actualit\xE9s", ko: "\uB274\uC2A4", zh: "\u65B0\u95FB" }, Shopping: { ja: "\u30B7\u30E7\u30C3\u30D4\u30F3\u30B0", ko: "\uC1FC\uD551", zh: "\u8D2D\u7269" }, Books: { ja: "\u66F8\u7C4D", de: "B\xFCcher", es: "Libros", fr: "Livres", ko: "\uC1FC\uD551", zh: "\u56FE\u4E66" } }; function translate(text) { const lang = navigator.language; if (langList[text][lang] !== void 0) { return langList[text][lang]; } else { return text; } } // src/registerNavItems.ts function registerNavItems(itemsDom) { itemsDom.appendTbmActiveItem( "all", itemsDom.createItemElem( translate("All"), getIconSvgElement(paths.all), true, createAllUrl() ), itemsDom.createItemElem( translate("All"), getIconSvgElement(enablePaths.all), false ) ); itemsDom.appendTbmActiveItem( "isch", itemsDom.createItemElem( translate("Images"), getIconSvgElement(paths.isch), true, createTbmUrl("isch") ), itemsDom.createItemElem( translate("Images"), getIconSvgElement(enablePaths.isch), false ) ); itemsDom.appendTbmActiveItem( "vid", itemsDom.createItemElem( translate("Videos"), getIconSvgElement(paths.vid), true, createTbmUrl("vid") ), itemsDom.createItemElem( translate("Videos"), getIconSvgElement(enablePaths.vid), false ) ); itemsDom.appendItem( itemsDom.createItemElem( translate("Maps"), getIconSvgElement(paths.maps, "0 0 16 16"), true, createMapUrl() ) ); itemsDom.appendTbmActiveItem( "nws", itemsDom.createItemElem( translate("News"), getIconSvgElement(paths.nws), true, createTbmUrl("nws") ), itemsDom.createItemElem( translate("News"), getIconSvgElement(enablePaths.nws), false ) ); itemsDom.appendTbmActiveItem( "shop", itemsDom.createItemElem( translate("Shopping"), getIconSvgElement(paths.shop), true, createTbmUrl("shop") ), itemsDom.createItemElem( translate("Shopping"), getIconSvgElement(enablePaths.shop), false ) ); itemsDom.appendTbmActiveItem( "bks", itemsDom.createItemElem( translate("Books"), getIconSvgElement(paths.bks), true, createTbmUrl("bks") ), itemsDom.createItemElem( translate("Books"), getIconSvgElement(enablePaths.bks), false ) ); } function createAllUrl() { const search = new Search(location.search); search.delete("tbm"); return search.getURL(); } function createTbmUrl(tbm) { const search = new Search(location.search); search.append("tbm", tbm); return search.getURL(); } function createMapUrl() { const search = new Search(location.search); const q = search.get("q"); return "https://www.google.com/maps/?q=" + q; } // src/registerStyle.ts function registerStyle(styleInjecter) { styleInjecter.addStyle( ["all", "vid", "nws", "bks"], ` .main > div:nth-child(1) > div:nth-child(1) { height: 45px; } .main > div:nth-child(1) > div:nth-child(9) > div:nth-child(1) { padding-left: 0; height: 43px; } .main > div:nth-child(1) > div:nth-child(9) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) { align-items: center; } @media (min-width: 1124px) and (max-width: 1300px){ .srp { --center-abs-margin: 30px!important; } } @media (min-width: 1410px) and (max-width: 1610px) { .srp { --center-abs-margin: 180px!important; } } @media (min-width: 1610px){ .srp { --center-abs-margin: 180px!important; } }` ); styleInjecter.addStyle( ["isch"], ` 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) { height:59px; } 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) { margin-left:0; } ` ); styleInjecter.addStyle( ["shop"], ` #cnt > div:nth-child(1) { height: 45px; } #cnt > div:nth-child(4) { padding: 23px 0 0px calc(var(--center-abs-margin) - 20px); } #cnt > div:nth-child(4) > div:nth-child(2) { margin-left:0; } ` ); styleInjecter.addStyle( ["*"], ` .navbar-parent { display: inline; margin-left: 169px; white-space: nowrap; color: #70757a; font-size: 13px; -webkit-user-select: none; } .navbar-now-item { border-bottom: 3px solid var(--classic-google-nav-bar-primary); color: var(--classic-google-nav-bar-primary); } .navbar-item-container { padding: 16px 12px 12px 10px; font-family: Google Sans,Roboto,HelveticaNeue,Arial,sans-serif; height: 16px; line-height: 16px; margin: 11px 1px 0; display: inline-block; font-size: 13px; } .navbar-item-icon-outer { display: inline-block; fill: currentColor; height: 16px; width: 16px; margin-right: 5px; vertical-align: text-bottom; } .navbar-now-item > navbar-item-icon-outer { fill: currentColor; } .navbar-item-container > a { text-decoration: none; color: var(--classic-google-nav-bar-text)!important; -webkit-tap-highlight-color: rgba(0,0,0,.10); } ` ); } // src/theme.ts function attachTheme(styleInjecter) { styleInjecter.injectOnLoad(["*"], () => { const theme = getComputedStyle(document.body).backgroundColor === "rgb(32, 33, 36)" ? "dark" : "right"; const styles = { dark: ` :root { --classic-google-nav-bar-text:#bdc1c6; --classic-google-nav-bar-primary:#8ab4f8; } `, right: ` :root { --classic-google-nav-bar-text:#202124; --classic-google-nav-bar-primary:#4285f4; } ` }; return styles[theme]; }); } // src/index.ts function main() { const searchManager = new Search(location.search); const tbm = searchManager.get("tbm"); const styleInjecter = new StyleInject(); const itemsDom = new NavBarItems(); if (tbm === void 0) { styleInjecter.setTbm("all"); } else { styleInjecter.setTbm(tbm); } registerStyle(styleInjecter); attachTheme(styleInjecter); styleInjecter.inject(); const navbarSelectors = { all: ".main > div:nth-child(1) > div:nth-child(9)", isch: "body > div:nth-child(6) > c-wiz > div:nth-child(2)", vid: ".main > div:nth-child(1) > div:nth-child(9)", shop: "#main > div:nth-child(1) > div:nth-child(4)" }; const navbarItemsSelectors = { all: "div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1)", isch: "div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1)", vid: "div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2)", shop: "div:nth-child(2)" }; document.addEventListener("DOMContentLoaded", () => { switch (tbm) { case void 0: { const navbar = document.querySelector(navbarSelectors.all); const itemsParent = navbar?.querySelector(navbarItemsSelectors.all); removeOriginalItems(itemsParent); itemsDom.setParentElement(itemsParent); itemsDom.setTbm("all"); break; } case "isch": { const navbar = document.querySelector(navbarSelectors.isch); const itemsParent = navbar?.querySelector(navbarItemsSelectors.isch); removeOriginalItems(itemsParent); itemsDom.setParentElement(itemsParent); itemsDom.setTbm("isch"); break; } case "vid": { const navbar = document.querySelector(navbarSelectors.vid); const itemsParent = navbar?.querySelector(navbarItemsSelectors.vid); removeOriginalItems(itemsParent); itemsDom.setParentElement(itemsParent); itemsDom.setTbm("vid"); break; } case "shop": { const navbar = document.querySelector(navbarSelectors.shop); const itemsParent = navbar?.querySelector(navbarItemsSelectors.shop); removeOriginalItems(itemsParent); itemsDom.setParentElement(itemsParent); itemsDom.setTbm("shop"); break; } case "nws": { const navbar = document.querySelector(navbarSelectors.all); const itemsParent = navbar?.querySelector(navbarItemsSelectors.all); removeOriginalItems(itemsParent); itemsDom.setParentElement(itemsParent); itemsDom.setTbm("nws"); break; } case "bks": { const navbar = document.querySelector(navbarSelectors.all); const itemsParent = navbar?.querySelector(navbarItemsSelectors.all); removeOriginalItems(itemsParent); itemsDom.setParentElement(itemsParent); itemsDom.setTbm("bks"); break; } } registerNavItems(itemsDom); itemsDom.render(); }); } function removeOriginalItems(itemsParent) { if (itemsParent === null || itemsParent === void 0) return; const items = itemsParent.querySelectorAll("div, a, span"); items.forEach((item) => { item.remove(); }); } var trustedPolicy = window.trustedTypes.createPolicy( "google-classic-navbar-trusted-policy", { createHTML: (input) => { return input; } } ); // node_modules/ts-extension-builder/tmp/entry.ts var args = {}; if (typeof GM_info !== "undefined" && GM_info.script.grant !== void 0) { GM_info.script.grant.forEach((propatyName) => { let keyName = propatyName.split("GM_")[1]; if (keyName === "xmlhttpRequest") { keyName = "xmlHttpRequest"; } args[propatyName] = GM[keyName]; }); } main(args);