Scripthub

Lots of scripts to enhance your browsing experience or automate tasks.

As of 2024-09-03. See the latest version.

// ==UserScript==
// @name        Scripthub
// @description Lots of scripts to enhance your browsing experience or automate tasks.
// @namespace   https://userscripts.org
// @include     *
// @version     1.1.1
// @license     GNU GPLv3
// ==/UserScript==

function showmessagefromscripthub(msg) {
  const message = document.createElement("div");
  message.textContent = msg;
  message.style.position = "fixed";
  message.style.top = "0";
  message.style.right = "0";
  message.style.zIndex = "9999";
  message.style.backgroundColor = "#333";
  message.style.color = "#fff";
  message.style.padding = "10px";
  message.style.opacity = "0";
  message.style.transition = "opacity 0.5s";
  document.body.appendChild(message);
  
  setTimeout(() => {
      message.style.opacity = "1";
  }, 1000);
  setTimeout(() => {
      message.style.opacity = "0";
  }, 4000);
  setTimeout(() => {
      document.body.removeChild(message);
  }, 4600);
}

try {
  if (window.location.hostname === 'userscripts.org') {
    var scr = "https://pooiod7.neocities.org/projects/scripthub/pages" + (window.location.pathname=="/"?"/home":window.location.pathname) + ".js";
    
    var script = document.createElement('script');
    script.src = scr;
    document.body.append(script);
  } else {
    (function() { var isblocked = 
        window.location.href.includes("replit.dev") || 
        window.location.href.includes("replit.co") || 
        window.location.href.includes("unpkg.com") || 
        window.location.href.includes("accounts.google.com");

      const urlParams = new URLSearchParams(window.location.search);
      const userscripts = urlParams.get('userscripts');
      const cookieName = 'scripthub_scripts';
      const getCookie = (name) => document.cookie.split('; ').find(row => row.startsWith(name + '='));
      const setCookie = (name, value, hours) => {
        const date = new Date();
        date.setTime(date.getTime() + (hours * 60 * 60 * 1000));
        document.cookie = `${name}=${value}; expires=${date.toUTCString()}; path=/`;
      };
      const clearCookie = (name) => {
        document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;
      };
      
      if (new URLSearchParams(window.location.search).get('noscripts')) {
        document.addEventListener('keydown', function(event) {
          if (event.ctrlKey && event.key === 'q') {
            event.preventDefault();
            const url = new URL(window.location);
            url.searchParams.delete('noscripts');
            window.location.href = url;
          }
        });
        clearCookie(cookieName);
        return;
      } else if (new URLSearchParams(window.location.search).get('forcescripts')) {
        document.addEventListener('keydown', function(event) {
          if (event.ctrlKey && event.key === 'q') {
            event.preventDefault();
            const url = new URL(window.location);
            url.searchParams.delete('forcescripts');
            window.location.href = url;
          }
        });
        clearCookie(cookieName);
        return;
      }
      
      if (window.location.href.toLowerCase().includes("recaptcha")) {
        const message = document.createElement("div");
        message.textContent = "Scripthub does not work with reCAPTCHA";
        document.body.appendChild(message);
        console.log("Scripthub disabled for reCAPTCHA embed");
        return;
      }
      
      const cookieValue = getCookie(cookieName);
  
      if (cookieValue) {
        const scriptUrls = JSON.parse(decodeURIComponent(cookieValue.split('=')[1]));
        scriptUrls.forEach(url => {
          const script = document.createElement('script');
          script.src = url;
          document.body.appendChild(script);
        });
      }
  
      document.addEventListener('keydown', function(event) {
        if (event.ctrlKey && event.key === 'r') {
          event.preventDefault();
          clearCookie(cookieName);
          window.location.reload();
          // window.location.replace(`https://userscripts.org/?tosite=${encodeURIComponent(window.location.href)}`);
        } else if (event.ctrlKey && event.key === 'q') {
          event.preventDefault();
          let ctrlQPressed = false;
          if (ctrlQPressed) {
            window.location.href = 'https://userscripts.org/';
          } else {
            ctrlQPressed = true;
            setTimeout(() => {
              const url = new URL(window.location);
              url.searchParams.set('noscripts', 'true');
              window.location.href = url;
            }, 300);
          }
        }
      });
  
      if (!cookieValue && userscripts) {
        try {
          const scriptUrls = JSON.parse(userscripts);
          scriptUrls.forEach(url => {
            var scriptloaderscripttmp = document.createElement('script');
            scriptloaderscripttmp.src = url;
            document.body.appendChild(scriptloaderscripttmp);
          });
          setCookie(cookieName, encodeURIComponent(userscripts), 1);
  
          urlParams.delete('userscripts');
          var newUrl = `${window.location.pathname}?${urlParams+window.location.hash}`;
          history.replaceState(null, '', newUrl);
          
          const url = window.location.href;
          const [baseUrl, hash] = url.split('#');
          if (baseUrl.endsWith('?')) {
            window.history.replaceState(null, null, baseUrl.slice(0, -1) + (hash ? '#' + hash : ''));
          }
        } catch (e) {
          console.error('Error parsing userscripts:', e);
        }
      } else if (!cookieValue) {
        if (window.location.href.startsWith('blob:') || window.location.href === 'about:blank') {
          console.log("Scripts disabled for this page");
          showmessagefromscripthub("Scripts are unavailable for this page");
          return;
        } else {
          if (!window.location.href.includes("forcescripts") && (isblocked)) {
            showmessagefromscripthub("Press ctrl + q to enable scripts on this page");
            document.addEventListener('keydown', function(event) {
              if (event.ctrlKey && event.key === 'q') {
                event.preventDefault();
                let ctrlQPressed = false;
                if (ctrlQPressed) {
                  window.location.href = 'https://userscripts.org/';
                } else {
                  ctrlQPressed = true;
                  setTimeout(() => {
                    const url = new URL(window.location);
                    url.searchParams.set('forcescripts', 'true');
                    window.location.replace(`https://userscripts.org/?tosite=${encodeURIComponent(url)}`);
                  }, 300);
                }
              }
            });
            return;
          } else {
            window.location.replace(`https://userscripts.org/?tosite=${encodeURIComponent(window.location.href)}`);
          }
        }
      }
    })();
  }
} catch(err) {
  showmessagefromscripthub("Unable to load userscripts");
}