HeroesWM Inventory Stars Hider

Удаляет артефакты инвентаря, отмеченные звёздами, только для вкладки "Все артефакты".

  1. // ==UserScript==
  2. // @name HeroesWM Inventory Stars Hider
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.2
  5. // @description Удаляет артефакты инвентаря, отмеченные звёздами, только для вкладки "Все артефакты".
  6. // @author o3-mini-ChatGPT
  7. // @match https://www.heroeswm.ru/inventory.php*
  8. // @grant none
  9. // @run-at document-end
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. // Массив подстрок для поиска нужных звездочек
  17. const starIndicators = [
  18. 'src="https://dcdn.heroeswm.ru/i/inv_im/small_star2.png"',
  19. 'src="https://dcdn.heroeswm.ru/i/inv_im/small_star1.png"'
  20. ];
  21.  
  22. /**
  23. * Функция проверяет, содержит ли элемент одну из указанных подстрок.
  24. * @param {HTMLElement} element - Элемент для проверки.
  25. * @returns {boolean} - Возвращает true, если элемент содержит хотя бы одну из строк.
  26. */
  27. function containsStarIndicator(element) {
  28. return starIndicators.some(indicator => element.innerHTML.indexOf(indicator) !== -1);
  29. }
  30.  
  31. /**
  32. * Функция проверяет, активна ли вкладка "Все артефакты" (filter_tab1).
  33. * @returns {boolean} - Возвращает true, если filter_tab1 имеет класс 'filter_tab_active'.
  34. */
  35. function isFilterTab1Active() {
  36. const filterTab1 = document.getElementById('filter_tab1');
  37. return filterTab1 && filterTab1.classList.contains('filter_tab_active');
  38. }
  39.  
  40. /**
  41. * Функция удаляет все элементы инвентаря (id начинается с "id_inv_item"),
  42. * если они содержат указанные изображения звезд, а также только если активна вкладка filter_tab1.
  43. */
  44. function removeStarElements() {
  45. if (!isFilterTab1Active()) {
  46. console.log('Filter Tab 1 не активна – удаление не производится.');
  47. return;
  48. }
  49. const inventoryItems = document.querySelectorAll("div[id^='id_inv_item']");
  50. inventoryItems.forEach(item => {
  51. if (containsStarIndicator(item)) {
  52. item.remove();
  53. console.log("Удален элемент инвентаря, содержащий звезду:", item);
  54. }
  55. });
  56. }
  57.  
  58. // Первый проход при загрузке страницы
  59. removeStarElements();
  60.  
  61. // Наблюдатель за динамическим добавлением элементов в DOM
  62. const observer = new MutationObserver(mutations => {
  63. // Если вкладка filter_tab1 не активна – никаких изменений не обрабатываем
  64. if (!isFilterTab1Active()) return;
  65.  
  66. mutations.forEach(mutation => {
  67. mutation.addedNodes.forEach(node => {
  68. // Обрабатываем только элементы
  69. if (node.nodeType === Node.ELEMENT_NODE) {
  70. // Если добавлен элемент инвентаря с нужным id и он содержит звездный индикатор
  71. if (node.id && node.id.indexOf("id_inv_item") === 0 && containsStarIndicator(node)) {
  72. node.remove();
  73. console.log("Удален динамически добавленный элемент инвентаря:", node);
  74. }
  75. // Проверяем всех потомков добавленного элемента, если вдруг они содержат inventory items
  76. const descendants = node.querySelectorAll("div[id^='id_inv_item']");
  77. descendants.forEach(descendant => {
  78. if (containsStarIndicator(descendant)) {
  79. descendant.remove();
  80. console.log("Удален динамически добавленный потомок инвентаря:", descendant);
  81. }
  82. });
  83. }
  84. });
  85. });
  86. });
  87.  
  88. // Наблюдаем за изменениями во всем теле документа
  89. observer.observe(document.body, { childList: true, subtree: true });
  90.  
  91. // Если вкладки меняются, можем контролировать повторное выполнение удаления.
  92. // Подписываемся на клик по элементам фильтра, затем через небольшой интервал запускаем проверку.
  93. document.querySelectorAll('.filter_tab').forEach(tab => {
  94. tab.addEventListener('click', () => {
  95. // Задержка для того, чтобы изменения классов отработали
  96. setTimeout(removeStarElements, 200);
  97. });
  98. });
  99. })();