Scripthub

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

As of 2024-08-24. 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.0
// @license     GNU GPLv3
// ==/UserScript==

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() {
    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.toString();
        }
      });
      clearCookie(cookieName);
      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.toString();
          }, 300);
        }
      }
    });

    if (!cookieValue && userscripts) {
      try {
        const scriptUrls = JSON.parse(userscripts);
        scriptUrls.forEach(url => {
          const script = document.createElement('script');
          script.src = url;
          document.body.appendChild(script);
        });
        setCookie(cookieName, encodeURIComponent(userscripts), 1);

        urlParams.delete('userscripts');
        const newUrl = `${window.location.pathname}?${urlParams.toString()}`;
        history.replaceState(null, '', newUrl);
      } catch (e) {
        console.error('Error parsing userscripts:', e);
      }
    } else if (!cookieValue) {
      window.location.replace(`https://userscripts.org/?tosite=${encodeURIComponent(window.location.href)}`);
    }
  })();
}