Hide GL updates

Позволяет скрыть существ для обмена на странице Гильдии Лидеров

  1. // ==UserScript==
  2. // @name Hide GL updates
  3. // @author _Vesbat_
  4. // @namespace _Vesbat_
  5. // @description Позволяет скрыть существ для обмена на странице Гильдии Лидеров
  6. // @version 0.07
  7. // @include https://www.heroeswm.ru/leader_army_exchange.php*
  8. // @include https://www.lordswm.com/leader_army_exchange.php*
  9. // @grant GM_deleteValue
  10. // @grant GM_getValue
  11. // @grant GM_setValue
  12. // @license MIT
  13. // ==/UserScript==
  14.  
  15.  
  16. (function() {
  17. 'use strict';
  18.  
  19. function isCellAvailableForExchange(cell){
  20. const elements = cell.getElementsByTagName('*');
  21. var result = false;
  22. var id = "";
  23. var isFirstRow = false;
  24.  
  25. if (cell.textContent === "Суммарное лидерство" || cell.textContent === "Total leadership"){
  26. isFirstRow = true;
  27. }
  28.  
  29. for (let i = 0; i < elements.length; i++) {
  30. const el = elements[i];
  31. if (el.value){
  32. id = id + el.value;
  33. }
  34. if (el.value && (el.value.includes("Обменять") || el.value.includes("Exchange"))) {
  35. result = true;
  36. break;
  37. }
  38. }
  39.  
  40. return {
  41. result: result,
  42. id: id,
  43. isFirstRow: isFirstRow
  44. }
  45. }
  46.  
  47. function isRowAvailableForExchange(row){
  48. console.log("!!! START")
  49. var result = false;
  50. var isFirstRow = false;
  51. var id = "";
  52. var cells = row.querySelectorAll('td');
  53. for (let i = 0; i < cells.length; i++){
  54. const cell = cells[i];
  55. id = id + cell.textContent
  56. const res = isCellAvailableForExchange(cell);
  57. if (res.result) {
  58. result = true
  59. id = id + res.id
  60. }
  61. isFirstRow = isFirstRow || res.isFirstRow
  62. }
  63. return {
  64. result: result,
  65. id: id,
  66. isFirstRow: isFirstRow
  67. }
  68. }
  69.  
  70. function addUpdateForHideList(updateId){
  71. const rowsForHideOld = GM_getValue("rows_for_hide")
  72. rowsForHideOld.push(updateId);
  73. GM_setValue("rows_for_hide", rowsForHideOld);
  74. }
  75.  
  76. var rowsForHideRaw = GM_getValue("rows_for_hide");
  77.  
  78. if (rowsForHideRaw === undefined){
  79. console.log("rowsForHideRaw is undefined");
  80. GM_setValue("rows_for_hide", []);
  81. rowsForHideRaw = [];
  82. }
  83.  
  84. var rows = document.querySelectorAll('table tr');
  85. var isBeforeFirstRow = true;
  86. rows.forEach(function(row) {
  87. const rowAvailableForExchange = isRowAvailableForExchange(row)
  88. const id = rowAvailableForExchange.id
  89.  
  90. if (rowsForHideRaw.includes(id)){
  91. row.style.display = 'none';
  92. } else if (rowAvailableForExchange.result){
  93. row.innerHTML += `<td class=wb align=center width=50 id="${id}"><img width="20" height="20" src="https://photo.heroeswm.ru/photo-catalog/0001802/997-4317920ft.png" title = "Hide" style="vertical-align: middle; cursor: pointer;"></td>`;
  94. const textElement = document.getElementById(id);
  95. textElement.addEventListener('click', function() {
  96. addUpdateForHideList(id);
  97. row.style.display = 'none';
  98. });
  99.  
  100. } else if (rowAvailableForExchange.isFirstRow) {
  101. isBeforeFirstRow = false;
  102. row.innerHTML += `<td class=wb align=center width=50 height=24 id="unhide_all_updates"><img width="24" height="16" src="https://photo.heroeswm.ru/photo-catalog/0001802/998-9acec89bt.png" title="Unhide all" style="vertical-align: middle; cursor: pointer"></td>`;
  103. const textElement = document.getElementById("unhide_all_updates");
  104. textElement.addEventListener('click', function() {
  105. GM_deleteValue("rows_for_hide");
  106. window.location.reload();
  107. });
  108. if (rowsForHideRaw.length>0) {
  109. textElement.style.display = 'visible';
  110. }
  111. else{
  112. textElement.style.display = 'none';
  113. }
  114. } else if (isBeforeFirstRow == false) {
  115. row.innerHTML += '<td class=wb align=center width=50></td>';
  116. }
  117. });
  118.  
  119.  
  120. })();