Greasy Fork is available in English.

Steam Inventory Filter Remover

Save space by removing unused filters from your Steam inventory

// 👋 Hola, usa 🐒Tampermonkey 👇
// https://www.tampermonkey.net/

// 👷 Script en construccion, en un futuro se podra administrar que categorias y elementos se ocultaran usando un dashboard.

// ==UserScript==
// @name            Steam Inventory Filter Remover
// @name:es         Eliminador de filtros para inventario de Steam
// @namespace       https://jlcareglio.github.io/
// @version         0.5.5
// @description     Save space by removing unused filters from your Steam inventory
// @description:es  Gana espacio quitando los filtros que no usas en el inventario de Steam
// @icon            https://www.google.com/s2/favicons?sz=64&domain=steamcommunity.com
// @grant           none
// @author          Jesús Lautaro Careglio Albornoz
// @source          https://gist.githubusercontent.com/JLCareglio/693dfb17680cfdf5ab29d63505ac5d38/raw/
// @match           https://steamcommunity.com/profiles/*/inventory*
// @match           https://steamcommunity.com/id/*/inventory*
// @match           https://steamcommunity.com/tradeoffer/new*
// @supportURL      https://gist.githubusercontent.com/JLCareglio/693dfb17680cfdf5ab29d63505ac5d38/
// ==/UserScript==

(function () {
  const filterCategories = JSON.parse(
    localStorage.getItem("filterCategories")
  ) || {
    game: {
      name: "Juego",
      isVisible: true,
      filtersToHide: [
        "7 Days to Die",
        "A Blind Legend",
        "Antichamber",
        "Arizona Sunshine",
        "Barotrauma",
        "BioShock 2 Remastered",
        "BioShock Infinite",
        "BioShock Remastered",
        "Blood and Bacon",
        "Break the Game",
        "Bridge Constructor Portal",
        "Celeste",
        "COMPOUND",
        "Divinity: Original Sin 2",
        "Don't Starve Together",
        "DOOM Eternal",
        "Evolve Stage 2",
        "Hades",
        "Half-Life 2",
        "Hollow Knight",
        "Journey",
        "Kingdom Come: Deliverance",
        "Kingdom: New Lands",
        "Kingdom Two Crowns",
        "LIMBO",
        "Lonely Mountains: Downhill",
        "Loop Hero",
        "Los Premios Steam 2021",
        "Los Premios Steam 2022",
        "Lunar New Year 2021",
        "Lunar New Year 2022",
        "Manifold Garden",
        "Mini Thief",
        "Narcosis",
        "Navpoint",
        "Neverout",
        "No Man's Sky",
        "Outer Wilds",
        "Patrick's Parabox",
        "PAYDAY 2",
        "Phasmophobia",
        "Please, Don't Touch Anything 3D",
        "Pongo",
        "Portal 2",
        "Project Zomboid",
        "Rebajas de verano 2022",
        "Rebajas Navideñas de 2014",
        "Resident Evil Revelations 2",
        "Risk of Rain 2",
        "SCUM",
        "Sports Fest 2023",
        "Spring Sale 2023",
        "Star Fields",
        "Steam",
        "Steam 3000",
        "Steam Deck",
        "Subnautica",
        "SUPERHOT VR",
        "Tabletop Simulator",
        "Terraria",
        "The Elder Scrolls Online",
        "The Steam Awards - 2021",
        "The Steam Awards - 2022",
        "The Witcher 3: Wild Hunt",
        "This War of Mine",
        "Undertale",
        "We Were Here Together",
        "while True: learn()",
        "Winter Collection - 2022",
        "Winter Sale 2021"
      ],
    },
    rarity: {
      name: "Rareza",
      isVisible: false,
      filtersToHide: [],
    },
    chromeBorder: {
      name: "Borde del cromo",
      isVisible: true,
      filtersToHide: [],
    },
    typeOfArticle: {
      name: "Tipo de artículo",
      isVisible: false,
      filtersToHide: [],
    },
    event: {
      name: "Evento",
      isVisible: false,
      filtersToHide: [],
    },
    misc: {
      name: "Misc.",
      isVisible: true,
      filtersToHide: ["No comerciable", "No intercambiable"],
    },
  };

  const SaveFilterCategories = () =>
    localStorage.setItem("filterCategories", JSON.stringify(filterCategories));

  const ConfigureTags = async () => {
    ShowTagFilters();

    const tagFilterContainers = document.querySelectorAll(
      ".econ_tag_filter_container"
    );
    const tagFilterCategories = document.querySelectorAll(
      ".econ_tag_filter_category"
    );

    tagFilterContainers.forEach((container) => {
      const label = container.querySelector(".econ_tag_filter_label");
      const labelText = label.textContent.replace(/\s*\(\d+\)\s*/g, "").trim();
      const category = Object.values(filterCategories).find((category) =>
        category.filtersToHide.includes(labelText)
      );

      if (category && category.isVisible) container.remove();
    });

    tagFilterCategories.forEach((category) => {
      const labelText = category.querySelector(
        ".econ_tag_filter_category_label"
      ).textContent;

      if (category.children.length === 1) category.remove();
      else {
        for (const categoryName in filterCategories) {
          const categoryObj = filterCategories[categoryName];
          if (
            categoryObj.name === labelText &&
            categoryObj.isVisible === false
          ) {
            category.remove();
            break;
          }
        }
      }
    });

    AddSelectAllButton();
  };

  const AddSelectAllButton = () => {
    // Obtener todos los elementos de categoría
    const categoryElements = document.querySelectorAll(
      ".econ_tag_filter_category"
    );

    // Encontrar el contenedor de la categoría "Juego"
    let juegoContainer;
    categoryElements.forEach((element) => {
      const categoryLabel = element.querySelector(
        ".econ_tag_filter_category_label"
      );
      if (categoryLabel && categoryLabel.textContent === "Juego") {
        juegoContainer = element;
      }
    });

    // Seleccionar los checkboxes dentro del contenedor de "Juego"
    const checkboxes = juegoContainer.querySelectorAll(
      '.econ_tag_filter_container input[type="checkbox"]'
    );

    // Crear el botón con un emoji que alterna entre "✅" y "❎"
    const button = document.createElement("button");
    let isChecked = false;
    const ToggleCheck = () => {
      isChecked = !isChecked;
      const emoji = isChecked
        ? "✅ Seleccionar todo"
        : "❎ Quitar seleccionados";
      button.innerHTML = `${emoji}<span style="display: block;">&nbsp;</span>`;
      button.textContent = emoji;
    };
    ToggleCheck();
    button.classList.add("btn_black");
    button.style.height = "25px";
    button.style.padding = "0 4px";
    button.addEventListener("click", () => {
      checkboxes.forEach((checkbox, i) => {
        checkbox.checked = isChecked;
        if (i === checkboxes.length - 1)
          checkbox.dispatchEvent(new Event("change"));
      });
      ToggleCheck();
    });

    // Insertar el botón junto a la categoría "Juego"
    const juegoLabel = juegoContainer.querySelector(
      ".econ_tag_filter_category_label"
    );
    juegoLabel.parentNode.insertBefore(button, juegoLabel.nextSibling);
  };

  if (document.readyState === "ready" || document.readyState === "complete") {
    document
      .querySelector("#filter_tag_show")
      .addEventListener("click", ConfigureTags);
  } else {
    document.onreadystatechange = () => {
      if (document.readyState == "complete") {
        document
          .querySelector("#filter_tag_show")
          .addEventListener("click", ConfigureTags);
      }
    };
  }
})();