[BROKEN] Arras.io - Start Menu Modifier

[BROKEN] Makes the start menu better to look at, adds a setting to hide empty servers, shows hidden servers.

  1. // ==UserScript==
  2. // @name [BROKEN] Arras.io - Start Menu Modifier
  3. // @version 1.6
  4. // @description [BROKEN] Makes the start menu better to look at, adds a setting to hide empty servers, shows hidden servers.
  5. // @author Taureon
  6. // @run-at document-end
  7. // @match https://arras.io/
  8. // @grant GM_setValue
  9. // @grant GM_getValue
  10. // @namespace https://greasyfork.org/users/935758
  11. // ==/UserScript==
  12.  
  13. //What would I need to do to become part of the development team?
  14. //-Taureon
  15.  
  16. //see all servers
  17. try {
  18. let k = JSON.parse(GM_getValue('arras.io', '{}'));
  19. k.privilege = 10;
  20. GM_setValue('arras.io', JSON.stringify(k));
  21. } catch (err) {
  22. console.log('no privilege', err);
  23. }
  24.  
  25. window.addEventListener("load", ()=>{
  26.  
  27. //unused element that takes up space
  28. document.querySelector(".menuTabs").remove();
  29.  
  30. //default by having the changelog tab selected instead
  31. document.querySelector("#changelogTabs").children[3].click();
  32.  
  33. //add UI for the server hider
  34. let empties = [],
  35. span = document.createElement("span"),
  36. check = document.createElement("input");
  37. span.innerText = "Hide empty Servers";
  38. span.style.display = "flex";
  39. check.type = "checkbox";
  40. check.checked = !!localStorage.getItem("hideEmptyServers");
  41. check.style.width = "13px";
  42. check.style.height = "13px";
  43. check.style.marginTop = "0px";
  44. check.style.marginBottom = "0px";
  45. check.oninput = () => {
  46. empties.forEach((x) => (x.hidden = check.checked));
  47. localStorage.setItem("hideEmptyServers", check.checked ? " " : "");
  48. };
  49. span.append(check);
  50. document.getElementById("serverFilterRegion").append(span);
  51. document.getElementById("serverFilterRegion").style.display = "flex";
  52.  
  53. let setHeight = (style, x) => style.maxHeight = style.height = x,
  54. doThing = () => {
  55. try {
  56. empties = Array.from(document.getElementById("serverSelector").children).slice(1).filter((x) => x.children[2].innerText.split("/")[0] == "0");
  57. check.oninput();
  58.  
  59. let rules = Array.from(Array.from(document.styleSheets).find((x) => x.href.includes("arras")).rules);
  60.  
  61. for (let ruleName of [".serverSelector", ".slider", ".sliderHolder", ".startMenuHolder", ".startMenuHolder.changelogHolder", ".startMenu", ".mainWrapper", ".shadowScroll", "#startMenuSlidingTrigger", "#startMenuWrapper", "#patchNotes"]) {
  62. let style = rules.find((x) => x.selectorText == ruleName).style;
  63.  
  64. switch (ruleName) {
  65. case ".serverSelector":
  66. setHeight(style, "calc(100% - 159px)");
  67. break;
  68. case ".slider":
  69. setHeight(style, "min-content");
  70. break;
  71. case ".sliderHolder":
  72. setHeight(style, "calc(100% - 50px)");
  73. break;
  74. case ".startMenuHolder":
  75. setHeight(style, "calc(100% - 20px)");
  76. break;
  77. case "#startMenuSlidingTrigger":
  78. style.padding = "10px";
  79. break;
  80. case ".startMenuHolder.changelogHolder":
  81. setHeight(style, "calc(100% - 20px)");
  82. style.display = "block";
  83. break;
  84. case ".startMenu":
  85. setHeight(style, "calc(100%)");
  86. break;
  87. case "#startMenuWrapper":
  88. setHeight(style, "calc(100% - 20px)");
  89. break;
  90. case "#patchNotes":
  91. setHeight(style, "calc(100% - 39px)");
  92. break;
  93. case ".mainWrapper":
  94. style.padding = "20px 20px 20px 20px";
  95. setHeight(style, "calc(100% - 40px)");
  96. break;
  97. case ".shadowScroll":
  98. style.background = style.backgroundSize = style.backgroundColor = style.backgroundRepeat = style.backgroundAttachment = "";
  99. }
  100. }
  101.  
  102. //When you're using document.querySelector()
  103. // https://youtu.be/mdquYEw36TU
  104. setHeight(document.querySelector("#startMenuWrapper > div > div.startMenuHolder.mainHolder > div.sliderHolder > div:nth-child(1)").style, "calc(100% - 315px)");
  105. } catch (err) {}
  106. };
  107.  
  108. doThing();
  109. setInterval(doThing, 1000);
  110.  
  111. });