Google toplinks shortcut

press 1, 2 or 3 to open links on google and yt serp

// ==UserScript==
// @name         Google toplinks shortcut
// @namespace    https://arsh.zip
// @version      2024-05-18
// @description  press 1, 2 or 3 to open links on google and yt serp
// @author       arsh.zip
// @match        https://www.google.com/search*
// @match        https://www.youtube.com/results*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=google.com
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
  "use strict";

  function isVisible(parent) {
    while (parent) {
      if (getComputedStyle(parent).display === "none") return false;
      parent = parent.parentElement;
    }
    return true;
  }

  function getLink(element) {
    while (element) {
      if (element.href) return element.href;
      element = element.parentElement;
    }
    return "";
  }
  function isDigit(e) {
    return e.code === "Digit1" || e.code === "Digit2" || e.code === "Digit3";
  }
  function getDigit(e) {
    return e.code.slice(-1) - "0" - 1;
  }

  document.addEventListener("keypress", (e) => {
    if (
      e.target.localName === "input" ||
      e.target.localName === "textarea" ||
      !isDigit(e)
    ) {
      return;
    }
    let c;
    if (window.location.hostname.includes("youtube.com")) {
      c = Array.from(document.querySelectorAll("a#video-title, span#video-title")).map((elem) => getLink(elem));
    } else if (window.location.hostname.includes("google.com")) {
      c = Array.from(document.querySelectorAll(".notranslate"))
        .filter((elem) => isVisible(elem))
        .map((elem) => getLink(elem));
    }
    let url = c[getDigit(e)];
    if (e.shiftKey) {
      window.open(url);
    } else {
      location.href = url;
    }
  });
})();