Hide Discord sidebars

Give the chat more screen space

当前为 2021-01-10 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Hide Discord sidebars
  3. // @namespace https://github.com/Dragosarus/Userscripts/
  4. // @version 2.2
  5. // @description Give the chat more screen space
  6. // @author Dragosarus
  7. // @match http://discord.com/*
  8. // @match https://discord.com/*
  9. // @grant GM_registerMenuCommand
  10. // @grant GM_unregisterMenuCommand
  11. // @require http://code.jquery.com/jquery-latest.js
  12. // ==/UserScript==
  13.  
  14. // NOTE: Does not work with Greasemonkey as it neither supports GM_registerMenuCommand nor GM_unregisterMenuCommand.
  15. // Use Tampermonkey or Violentmonkey instead.
  16.  
  17. (function() {
  18. 'use strict';
  19. var hide = {
  20. serverSidebar : true,
  21. channelSidebar: true,
  22. memberSidebar : true // note: there is a "Member List" button in the top-right corner
  23. };
  24.  
  25. var serverSelector = "nav[aria-label='Servers sidebar']";
  26. var channelSelector = "div[class*='sidebar']";
  27. var memberSelector = "div[class*='membersWrap']";
  28. var memberIconSelector = "div[aria-label = 'Member List']"
  29. var baseSelector = "div[class*='base']"; // needed when hiding server sidebar
  30.  
  31. var hideMenu = "Hide sidebars";
  32. var showMenu = "Show sidebars";
  33. var memberToggleMenu = "Toggle member sidebar"; // + " [current: (in)visible]"
  34. var hideSidebarMenuShortcut = 's';
  35.  
  36. var hideSidebarMenuId;
  37. var memberToggleMenuId;
  38. var baseOffset; // e.g. "72px"
  39.  
  40. var sidebarsHidden = false;
  41. var memberSidebarHidden; // from the "Member List" button
  42. var selectors = {
  43. serverSidebar: serverSelector,
  44. channelSidebar: channelSelector,
  45. memberSidebar: memberSelector
  46. };
  47.  
  48. init();
  49.  
  50. function init() {
  51. updateHideSidebarMenu();
  52. }
  53.  
  54. function onHideSidebarMenuClick() {
  55. // Read state of "Member List" button
  56. memberSidebarHidden = $(memberIconSelector).filter("div[class *= 'selected']").length == 0;
  57.  
  58. // Toggle visibility of sidebars
  59. for (var sidebar in selectors) {
  60. // hideMemberSidebar = memberSidebarHidden || sidebarsHidden
  61. if (sidebar == "memberSidebar" && memberSidebarHidden) {continue;}
  62.  
  63. if (hide[sidebar]) {
  64. setSidebar(selectors[sidebar], sidebarsHidden);
  65. }
  66. }
  67.  
  68. // Extra work is needed to properly hide the server sidebar
  69. if (hide.serverSidebar) {
  70. var base = $(baseSelector);
  71. if (sidebarsHidden) {
  72. base.css("left", baseOffset);
  73. } else {
  74. baseOffset = base[0].style.left;
  75. base.css("left", "0px");
  76. }
  77. }
  78. sidebarsHidden ^= true;
  79.  
  80. // Update menu
  81. updateHideSidebarMenu();
  82. }
  83.  
  84. function updateHideSidebarMenu() {
  85. GM_unregisterMenuCommand(hideSidebarMenuId);
  86. var menu = sidebarsHidden ? showMenu : hideMenu;
  87. hideSidebarMenuId = GM_registerMenuCommand(menu, onHideSidebarMenuClick, hideSidebarMenuShortcut);
  88. }
  89.  
  90. function setSidebar(selector, boolValue) {
  91. if (boolValue) {
  92. showSidebar(selector);
  93. } else {
  94. hideSidebar(selector);
  95. }
  96. }
  97.  
  98. function hideSidebar(selector) {
  99. var node = $(selector)[0];
  100. node.style.display = "none";
  101. }
  102.  
  103. function showSidebar(selector) {
  104. var node = $(selector)[0];
  105. node.style.removeProperty("display");
  106. }
  107.  
  108. })();
  109. /*eslint-env jquery*/ // stop eslint from showing "'$' is not defined" warnings