// ==UserScript== // @name Github search on Google // @version 2.0.5 // @description Adds a button to search github.com with Google // @author Alexyoe // @namespace https://github.com/Alexyoe/Github-on-Google-Search // @license MIT // @include http*://www.google.*/search* // @include http*://google.*/search* // @run-at document-end // @downloadURL none // ==/UserScript== // Settings const settings = { iconVisible: true, // Toggle icon visibility nameVisible: true, // Toggle name visibility btnPosition: "default", // Options: "start", "end", "default" fixSize: true, // Expands the search buttons bar }; // Start Code const queryRegex = /q=[^&]+/g; const siteRegex = /\+site(?:%3A|\:).+\.[^&+]+/g; const githubUrl = "+site%3Agithub.com"; let githubIcon = ''; const isImageSearch = /[?&]tbm=isch/.test(location.search); // Sanitize SVG if necessary if (typeof trustedTypes !== "undefined") { const policy = trustedTypes.createPolicy("html", { createHTML: (input) => input, }); githubIcon = policy.createHTML(githubIcon); } // Main function to run on load (function () { const el = document.createElement("a"); el.className = isImageSearch ? "NZmxZe" : "LatpMc nPDzT T3FoJb"; const mainDiv = document.createElement("div"); mainDiv.className = isImageSearch ? "m3kSL" : ""; mainDiv.style.cssText = isImageSearch ? "display:inline-flex;gap:5px;" : ""; // Create the span to wrap the icon and title const span = document.createElement("span"); span.style.cssText = "display:inline-flex;gap:5px;align-items:center;"; // Ensuring vertical centering span.className = isImageSearch ? "m3kSL" : "YmvwI"; if (settings.iconVisible) { const iconDiv = document.createElement("div"); iconDiv.style.cssText = "height:16px;width:16px;fill:white;"; iconDiv.innerHTML = githubIcon; span.appendChild(iconDiv); } if (settings.nameVisible && !isImageSearch) { span.appendChild(document.createTextNode("Github")); } mainDiv.appendChild(span); el.appendChild(mainDiv); if (settings.nameVisible && isImageSearch) { el.appendChild(document.createTextNode("Github")); } // Modify the URL to include the Github site search el.href = window.location.href.replace(queryRegex, (match) => match.search(siteRegex) >= 0 ? match.replace(siteRegex, githubUrl) : match + githubUrl ); // Determine where to insert the link element const insertLink = (menuBar, offset) => { const positionMap = { start: () => menuBar.insertBefore(el, menuBar.children[offset]), end: () => menuBar.appendChild(el), default: () => menuBar.appendChild(el), }; (positionMap[settings.btnPosition] || positionMap["default"])(); }; if (isImageSearch) { const menuBar = document.querySelector(".T47uwc"); insertLink(menuBar, 1); } else { const menuBar = document.querySelector(".crJ18e"); insertLink(menuBar, 0); } // Fix Sizing if (settings.fixSize) { const buttonBox = document.querySelector(".xhjkHe"); buttonBox.style.maxWidth = "inherit"; } })();