fandom.com - Remove bloatware

Removes unnecessary elements from fandom website, leaving only what's important.

Ajankohdalta 24.4.2024. Katso uusin versio.

// ==UserScript==
// @name           fandom.com - Remove bloatware
// @namespace      fandom.com utils
// @match          https://*.fandom.com/*
// @icon           https://raw.githubusercontent.com/eye-wave/greasy-fork/main/packages/fandom-debloat/assets/icon.svg
// @description    Removes unnecessary elements from fandom website, leaving only what's important.
// @grant          none
// @version        1.0.0
// @author         eye-wave
// @license        GPL-3.0+
// ==/UserScript==
"use strict";
(() => {
  // ../../utils/src/index.ts
  function $(query) {
    return document.querySelectorAll(query);
  }
  function $s(query) {
    return document.querySelector(query);
  }

  // src/window.js
  window.ads = void 0;

  // src/index.ts
  var toResize = [".fandom-community-header__background", ".main-container"];
  var massRemove = ["iframe", "link[as='script']", "meta", "script", "style:not([type='text/css'])"];
  var removeListSingle = [
    ".bottom-ads-container",
    ".fandom-sticky-header",
    ".global-navigation",
    ".global-registration-buttons",
    ".notifications-placeholder",
    ".page__right-rail",
    ".page-side-tools",
    ".right-rail-wrapper",
    ".top-ads-container",
    ".unified-search__layout__right-rail",
    "#age-gate",
    "#featured-video__player-container",
    "#global-explore-navigation",
    "#p-views",
    "#WikiaBar",
    "body > svg + *",
    "div>div[data-tracking-opt-in-overlay]",
    "footer"
  ];
  removeBloatware();
  function removeBloatware() {
    removeListSingle.forEach((q) => $s(q)?.remove());
    massRemove.forEach((q) => $(q).forEach((e) => e?.remove()));
    toResize.forEach((q) => $s(q)?.setAttribute("style", "width:100%;margin:0"));
  }
  removeExcessiveBodyClassNames();
  function removeExcessiveBodyClassNames() {
    for (const c of document.body.classList) {
      if (c.includes("skin-fandom"))
        continue;
      document.body.classList.remove(c);
    }
  }
  function removeExcessiveHtmlAttrs() {
    document.documentElement.removeAttribute("class");
    document.documentElement.removeAttribute("dir");
    document.documentElement.removeAttribute("style");
  }
  new MutationObserver((mutationsList) => {
    for (const mutation of mutationsList) {
      if (mutation.type === "childList")
        removeBloatware();
      if (mutation.type === "attributes") {
        removeExcessiveBodyClassNames();
        removeExcessiveHtmlAttrs();
      }
    }
  }).observe(document.documentElement, {
    childList: true,
    subtree: true,
    attributes: true,
    attributeOldValue: true
  });
})();