Base64 Auto Decoder

Decode base64-encoded links

// ==UserScript==
// @name        Base64 Auto Decoder
// @namespace   Wiki-Index
// @match       *://wiki-index.pages.dev/*
// @grant       none
// @version     1.0
// @description Decode base64-encoded links
// ==/UserScript==

setTimeout(() => {
  'use strict';
  const base64Regex = /^[A-Za-z0-9+/]+=*$/;
  const isURL = (str) => /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i.test(str);
  const decodeAndDisplay = (element) => {
    const content = element.textContent.trim();
    if (base64Regex.test(content)) {
      const decodedString = atob(content).trim();
      if (isURL(decodedString)) {
        element.innerHTML = `<a href="${decodedString}" target="_self">${decodedString}</a>`;
      }
    }
  };
  const observer = new IntersectionObserver((entries, observer) => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        decodeAndDisplay(entry.target);
        observer.unobserve(entry.target);
      }
    });
  });
  document.querySelectorAll('code, p').forEach(element => {
    observer.observe(element);
  });
}, 5000);