Hide Discord sidebars

Give the chat more screen space

当前为 2020-12-28 提交的版本,查看 最新版本

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