X/Twitter Clean menu and sidebar (Supports multiple language)

hidden Menu,Grok,Premium subscription,Verified Orgs,other,Explore,Notifications,Messages,Communities,Bookmarks,Right Column and Customizable Settings

当前为 2025-03-09 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name X/Twitter Clean menu and sidebar (Supports multiple language)
  3. // @name:ja X/Twitter きれいなメニューとサイドバー(多言語対応)
  4. // @name:zh-TW X/Twitter 乾淨的選單和側邊欄(支持多種語言)
  5. // @name:zh-cn X/Twitter 干净的选单和侧边栏(支持多种语言)
  6. // @version 2.3
  7. // @description hidden Menu,Grok,Premium subscription,Verified Orgs,other,Explore,Notifications,Messages,Communities,Bookmarks,Right Column and Customizable Settings
  8. // @description:ja 清潔なメニュー、Grok、高度なサブスクリプション、認証済み組織、他の、探索、通知、メッセージ、コミュニティ、ブックマーク、右側カラム、およびカスタム設定
  9. // @description:zh-tw 乾淨的 選單、Grok、高級訂閱、已認證組織、其他、探索、通知、訊息、社群、書籤、右側邊欄和可自訂設定
  10. // @description:zh-cn 干净的 选单、Grok、高级订阅、已认证组织、其他、探索、通知、私信、书签、书签、右侧边栏和可自订设定
  11. // @license MIT
  12. // @author movwei
  13. // @match https://x.com/*
  14. // @match https://twitter.com/*
  15. // @grant GM_registerMenuCommand
  16. // @grant GM_setValue
  17. // @grant GM_getValue
  18. // @grant GM_addStyle
  19. // @namespace https://greasyfork.org/users/1041101
  20. // ==/UserScript==
  21.  
  22. (function() {
  23. 'use strict';
  24.  
  25. const defaultSettings = {
  26. hideGrok: true,
  27. hidePremiumSignUp: true,
  28. hideSelectors: true,
  29. hideVerifiedOrgs: true,
  30. hideother: true,
  31. hideExplore: false,
  32. hideNotifications: false,
  33. hideBookmarks: false,
  34. hideMessages: false,
  35. hideCommunities: false,
  36. hideRightColumn: false,
  37. useLargerCSS: false,
  38. cssWidth: 680,
  39. };
  40.  
  41. const settings = {
  42. hideGrok: GM_getValue('hideGrok', defaultSettings.hideGrok),
  43. hidePremiumSignUp: GM_getValue('hidePremiumSignUp', defaultSettings.hidePremiumSignUp),
  44. hideSelectors: GM_getValue('hideSelectors', defaultSettings.hideSelectors),
  45. hideVerifiedOrgs: GM_getValue('hideVerifiedOrgs', defaultSettings.hideVerifiedOrgs),
  46. hideother: GM_getValue('hideother', defaultSettings.hideother),
  47. hideExplore: GM_getValue('hideExplore', defaultSettings.hideExplore),
  48. hideNotifications: GM_getValue('hideNotifications', defaultSettings.hideNotifications),
  49. hideBookmarks: GM_getValue('hideBookmarks', defaultSettings.hideBookmarks),
  50. hideCommunities: GM_getValue('hideCommunities', defaultSettings.hideCommunities),
  51. hideMessages: GM_getValue('hideMessages', defaultSettings.hideMessages),
  52. hideRightColumn: GM_getValue('hideRightColumn', defaultSettings.hideRightColumn),
  53. useLargerCSS: GM_getValue('useLargerCSS', defaultSettings.useLargerCSS),
  54. cssWidth: GM_getValue('cssWidth', defaultSettings.cssWidth),
  55. };
  56.  
  57. // 多語言支持
  58. const language = navigator.language || navigator.userLanguage;
  59. const languages = {
  60. 'en': {
  61. 'hideGrok': 'Hide Grok',
  62. 'hidePremiumSignUp': 'Hide Premium Sign-up',
  63. 'hideSelectors': 'Hide Subscribe Message',
  64. 'hideVerifiedOrgs': 'Hide Verified Orgs',
  65. 'hideExplore': 'Hide Explore',
  66. 'hideNotifications': 'Hide Notifications',
  67. 'hideMessages': 'Hide Messages',
  68. 'hideCommunities': 'Hide Communities',
  69. 'hideBookmarks': 'Hide Bookmarks',
  70. 'hideother': 'Hide other',
  71. 'hideRightColumn': 'Hide Right Column',
  72. 'useLargerCSS': 'Larger Post Area',
  73. 'cssWidth': 'Custom width',
  74. 'settings': 'Settings',
  75. 'saveRefresh': 'Save & refresh',
  76. 'close': 'Close'
  77. },
  78. 'zh-TW': {
  79. 'hideGrok': '隱藏 Grok',
  80. 'hidePremiumSignUp': '隱藏 高級訂閱',
  81. 'hideSelectors': '隱藏 訂閱訊息',
  82. 'hideVerifiedOrgs': '隱藏 已認證組織',
  83. 'hideExplore': '隱藏 探索',
  84. 'hideNotifications': '隱藏 通知',
  85. 'hideMessages': '隱藏 訊息',
  86. 'hideCommunities': '隱藏 社群',
  87. 'hideBookmarks': '隱藏 書籤',
  88. 'hideother': '隱藏 其他',
  89. 'hideRightColumn': '隱藏 右側邊欄',
  90. 'useLargerCSS': '更大貼文區域',
  91. 'cssWidth': '自訂寬度',
  92. 'settings': '設定',
  93. 'saveRefresh': '保存並刷新',
  94. 'close': '關閉'
  95. },
  96. 'zh-CN': {
  97. 'hideGrok': '隐藏 Grok',
  98. 'hidePremiumSignUp': '隐藏 高级订阅',
  99. 'hideSelectors': '隐藏 订阅消息',
  100. 'hideVerifiedOrgs': '隐藏 已认证组织',
  101. 'hideExplore': '隐藏 探索',
  102. 'hideNotifications': '隐藏 通知',
  103. 'hideMessages': '隐藏 私信',
  104. 'hideCommunities': '隐藏 社群',
  105. 'hideBookmarks': '隐藏 书签',
  106. 'hideother': '隐藏 其他',
  107. 'hideRightColumn': '隐藏 右侧边栏',
  108. 'useLargerCSS': '更大帖子区域',
  109. 'cssWidth': '自定义宽度',
  110. 'settings': '设置',
  111. 'saveRefresh': '保存并刷新',
  112. 'close': '关闭'
  113. },
  114. 'ja': {
  115. 'hideGrok': 'Grokを非表示',
  116. 'hidePremiumSignUp': 'プレミアムサインアップを非表示',
  117. 'hideSelectors': 'サブスクライブメッセージを非表示',
  118. 'hideVerifiedOrgs': '認証済み組織を非表示',
  119. 'hideExplore': '話題を検索を非表示',
  120. 'hideNotifications': '通知を非表示',
  121. 'hideMessages': 'メッセージを非表示',
  122. 'hideCommunities': 'コミュニティを非表示',
  123. 'hideBookmarks': 'ブックマークを非表示',
  124. 'hideother': '他のを非表示',
  125. 'hideRightColumn': '右側カラムを非表示',
  126. 'useLargerCSS': 'より大きな投稿エリア',
  127. 'cssWidth': 'カスタム幅',
  128. 'settings': '設定',
  129. 'saveRefresh': '保存して更新',
  130. 'close': '閉じる'
  131. },
  132. };
  133.  
  134. const currentLanguage = languages[language] || languages['en'];
  135.  
  136. function createSettingsPanel() {
  137. const panel = document.createElement('div');
  138. panel.id = 'settingsPanel';
  139. panel.innerHTML = `
  140. <div id="settingsPanelContent">
  141. <div class="settings-header">
  142. <h2>${currentLanguage['settings']}</h2>
  143. </div>
  144.  
  145. <div class="settings-section">
  146. <label class="toggle-switch">
  147. <input type="checkbox" id="hideGrokCheckbox" ${settings.hideGrok ? 'checked' : ''}>
  148. <span class="toggle-slider"></span>
  149. <span class="toggle-label">${currentLanguage['hideGrok']}</span>
  150. </label>
  151. <label class="toggle-switch">
  152. <input type="checkbox" id="hidePremiumSignUpCheckbox" ${settings.hidePremiumSignUp ? 'checked' : ''}>
  153. <span class="toggle-slider"></span>
  154. <span class="toggle-label">${currentLanguage['hidePremiumSignUp']}</span>
  155. </label>
  156. <label class="toggle-switch">
  157. <input type="checkbox" id="hideSelectorsCheckbox" ${settings.hideSelectors ? 'checked' : ''}>
  158. <span class="toggle-slider"></span>
  159. <span class="toggle-label">${currentLanguage['hideSelectors']}</span>
  160. </label>
  161. <label class="toggle-switch">
  162. <input type="checkbox" id="hideVerifiedOrgsCheckbox" ${settings.hideVerifiedOrgs ? 'checked' : ''}>
  163. <span class="toggle-slider"></span>
  164. <span class="toggle-label">${currentLanguage['hideVerifiedOrgs']}</span>
  165. </label>
  166. <label class="toggle-switch">
  167. <input type="checkbox" id="hideotherCheckbox" ${settings.hideother ? 'checked' : ''}>
  168. <span class="toggle-slider"></span>
  169. <span class="toggle-label">${currentLanguage['hideother']}</span>
  170. </label>
  171. </div>
  172.  
  173. <div class="settings-section">
  174. <label class="toggle-switch">
  175. <input type="checkbox" id="hideExploreCheckbox" ${settings.hideExplore ? 'checked' : ''}>
  176. <span class="toggle-slider"></span>
  177. <span class="toggle-label">${currentLanguage['hideExplore']}</span>
  178. </label>
  179. <label class="toggle-switch">
  180. <input type="checkbox" id="hideNotificationsCheckbox" ${settings.hideNotifications ? 'checked' : ''}>
  181. <span class="toggle-slider"></span>
  182. <span class="toggle-label">${currentLanguage['hideNotifications']}</span>
  183. </label>
  184. <label class="toggle-switch">
  185. <input type="checkbox" id="hideMessagesCheckbox" ${settings.hideMessages ? 'checked' : ''}>
  186. <span class="toggle-slider"></span>
  187. <span class="toggle-label">${currentLanguage['hideMessages']}</span>
  188. </label>
  189. <label class="toggle-switch">
  190. <input type="checkbox" id="hideCommunitiesCheckbox" ${settings.hideCommunities ? 'checked' : ''}>
  191. <span class="toggle-slider"></span>
  192. <span class="toggle-label">${currentLanguage['hideCommunities']}</span>
  193. </label>
  194. <label class="toggle-switch">
  195. <input type="checkbox" id="hideBookmarksCheckbox" ${settings.hideBookmarks ? 'checked' : ''}>
  196. <span class="toggle-slider"></span>
  197. <span class="toggle-label">${currentLanguage['hideBookmarks']}</span>
  198. </label>
  199. </div>
  200.  
  201. <div class="settings-section">
  202. <label class="toggle-switch">
  203. <input type="checkbox" id="hideRightColumnCheckbox" ${settings.hideRightColumn ? 'checked' : ''}>
  204. <span class="toggle-slider"></span>
  205. <span class="toggle-label">${currentLanguage['hideRightColumn']}</label>
  206. </label>
  207. <label class="toggle-switch">
  208. <input type="checkbox" id="useLargerCSSCheckbox" ${settings.useLargerCSS ? 'checked' : ''}>
  209. <span class="toggle-slider"></span>
  210. <span class="toggle-label">${currentLanguage['useLargerCSS']}</span>
  211. </label>
  212. <div class="width-input-container">
  213. <span class="width-label">${currentLanguage['cssWidth']}</span>
  214. <div class="width-input-wrapper">
  215. <input type="number" id="cssWidthInput" class="width-input" value="${settings.cssWidth}" min="400" max="1200">
  216. <span class="width-unit">px</span>
  217. </div>
  218. </div>
  219. </div>
  220.  
  221. <div class="buttons-container">
  222. <button id="saveSettingsButton" class="panel-button primary-button">${currentLanguage['saveRefresh']}</button>
  223. <button id="closeSettingsButton" class="panel-button secondary-button">${currentLanguage['close']}</button>
  224. </div>
  225. </div>
  226. `;
  227. document.body.appendChild(panel);
  228. document.getElementById('saveSettingsButton').addEventListener('click', saveSettings);
  229. document.getElementById('closeSettingsButton').addEventListener('click', () => {
  230. document.getElementById('settingsPanel').style.display = 'none';
  231. });
  232.  
  233.  
  234. document.getElementById('hideRightColumnCheckbox').addEventListener('change', function() {
  235. if (this.checked) {
  236. document.getElementById('useLargerCSSCheckbox').checked = true;
  237. } else {
  238. document.getElementById('useLargerCSSCheckbox').checked = false;
  239. }
  240. });
  241.  
  242. document.getElementById('useLargerCSSCheckbox').addEventListener('change', function() {
  243. });
  244. }
  245.  
  246. function saveSettings() {
  247. settings.hideGrok = document.getElementById('hideGrokCheckbox').checked;
  248. settings.hidePremiumSignUp = document.getElementById('hidePremiumSignUpCheckbox').checked;
  249. settings.hideSelectors = document.getElementById('hideSelectorsCheckbox').checked;
  250. settings.hideVerifiedOrgs = document.getElementById('hideVerifiedOrgsCheckbox').checked;
  251. settings.hideExplore = document.getElementById('hideExploreCheckbox').checked;
  252. settings.hideNotifications = document.getElementById('hideNotificationsCheckbox').checked;
  253. settings.hideBookmarks = document.getElementById('hideBookmarksCheckbox').checked;
  254. settings.hideMessages = document.getElementById('hideMessagesCheckbox').checked;
  255. settings.hideCommunities = document.getElementById('hideCommunitiesCheckbox').checked;
  256. settings.hideother = document.getElementById('hideotherCheckbox').checked;
  257. settings.hideRightColumn = document.getElementById('hideRightColumnCheckbox').checked;
  258. settings.useLargerCSS = document.getElementById('useLargerCSSCheckbox').checked;
  259. settings.cssWidth = parseInt(document.getElementById('cssWidthInput').value) || 680;
  260.  
  261. GM_setValue('hideGrok', settings.hideGrok);
  262. GM_setValue('hidePremiumSignUp', settings.hidePremiumSignUp);
  263. GM_setValue('hideSelectors', settings.hideSelectors);
  264. GM_setValue('hideVerifiedOrgs', settings.hideVerifiedOrgs);
  265. GM_setValue('hideExplore', settings.hideExplore);
  266. GM_setValue('hideNotifications', settings.hideNotifications);
  267. GM_setValue('hideBookmarks', settings.hideBookmarks);
  268. GM_setValue('hideMessages', settings.hideMessages);
  269. GM_setValue('hideCommunities', settings.hideCommunities);
  270. GM_setValue('hideother', settings.hideother);
  271. GM_setValue('hideRightColumn', settings.hideRightColumn);
  272. GM_setValue('useLargerCSS', settings.useLargerCSS);
  273. GM_setValue('cssWidth', settings.cssWidth);
  274. location.reload();
  275. }
  276.  
  277. GM_addStyle(`
  278. #settingsPanel {
  279. width: 320px;
  280. position: fixed;
  281. top: 50%;
  282. left: 50%;
  283. transform: translate(-50%, -50%);
  284. background-color: #ffffff;
  285. border: none;
  286. padding: 0;
  287. z-index: 10000;
  288. display: none;
  289. box-shadow: 0 8px 30px rgba(0,0,0,0.12);
  290. border-radius: 16px;
  291. font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  292. overflow: hidden;
  293. }
  294.  
  295. #settingsPanelContent {
  296. display: flex;
  297. flex-direction: column;
  298. width: 100%;
  299. }
  300.  
  301. .settings-header {
  302. display: flex;
  303. justify-content: center;
  304. align-items: center;
  305. padding: 16px 20px;
  306. border-bottom: 1px solid rgba(0,0,0,0.08);
  307. }
  308.  
  309. #settingsPanel h2 {
  310. margin: 0;
  311. font-size: 18px;
  312. font-weight: 700;
  313. color: #0f1419;
  314. text-align: center;
  315. }
  316.  
  317. .settings-section {
  318. padding: 12px 20px;
  319. border-bottom: 1px solid rgba(0,0,0,0.08);
  320. }
  321.  
  322. .toggle-switch {
  323. position: relative;
  324. display: flex;
  325. align-items: center;
  326. margin: 12px 0;
  327. padding: 6px 0;
  328. cursor: pointer;
  329. }
  330.  
  331. .toggle-switch input {
  332. opacity: 0;
  333. width: 0;
  334. height: 0;
  335. }
  336.  
  337. .toggle-slider {
  338. position: relative;
  339. display: inline-block;
  340. width: 42px;
  341. height: 24px;
  342. background-color: #cfd9de;
  343. border-radius: 24px;
  344. transition: .3s;
  345. margin-right: 12px;
  346. flex-shrink: 0;
  347. }
  348.  
  349. .toggle-slider:before {
  350. position: absolute;
  351. content: "";
  352. height: 18px;
  353. width: 18px;
  354. left: 3px;
  355. bottom: 3px;
  356. background-color: white;
  357. border-radius: 50%;
  358. transition: .3s;
  359. }
  360.  
  361. input:checked + .toggle-slider {
  362. background-color: #1d9bf0;
  363. }
  364.  
  365. input:checked + .toggle-slider:before {
  366. transform: translateX(18px);
  367. }
  368.  
  369. .toggle-label {
  370. font-size: 15px;
  371. color: #0f1419;
  372. }
  373.  
  374. .buttons-container {
  375. display: flex;
  376. justify-content: center;
  377. padding: 16px 20px;
  378. gap: 10px;
  379. }
  380.  
  381. .panel-button {
  382. flex: 1;
  383. padding: 12px 0;
  384. font-size: 15px;
  385. font-weight: 600;
  386. border: none;
  387. border-radius: 9999px;
  388. cursor: pointer;
  389. transition: background-color 0.2s;
  390. text-align: center;
  391. }
  392.  
  393. .primary-button {
  394. color: white;
  395. background-color: #1d9bf0;
  396. }
  397.  
  398. .primary-button:hover {
  399. background-color: #1a8cd8;
  400. }
  401.  
  402. .secondary-button {
  403. color: #0f1419;
  404. background-color: #e6e7e7;
  405. }
  406.  
  407. .secondary-button:hover {
  408. background-color: #d1d1d1;
  409. }
  410. .width-input-container {
  411. display: flex;
  412. align-items: center;
  413. justify-content: center;
  414. margin: 12px 0;
  415. padding: 6px 0;
  416. }
  417.  
  418. .width-label {
  419. font-size: 15px;
  420. color: #0f1419;
  421. flex-grow: 0.1;
  422. }
  423.  
  424. .width-input-wrapper {
  425. position: relative;
  426. display: flex;
  427. align-items: center;
  428. }
  429.  
  430. .width-input {
  431. width: 90px;
  432. padding: 8px 30px 8px 12px;
  433. border: 1px solid #cfd9de;
  434. border-radius: 9999px;
  435. font-size: 14px;
  436. transition: border-color 0.2s;
  437. text-align: center;
  438. }
  439.  
  440. .width-input:focus {
  441. outline: none;
  442. border-color: #1d9bf0;
  443. box-shadow: 0 0 0 1px rgba(29, 155, 240, 0.3);
  444. }
  445.  
  446. .width-unit {
  447. position: absolute;
  448. right: 12px;
  449. font-size: 14px;
  450. color: #536471;
  451. pointer-events: none;
  452. }
  453.  
  454. .width-input::-webkit-inner-spin-button,
  455. .width-input::-webkit-outer-spin-button {
  456. -webkit-appearance: none;
  457. margin: 0;
  458. }
  459.  
  460. .width-input[type=number] {
  461. -moz-appearance: textfield;
  462. }
  463. `);
  464.  
  465. createSettingsPanel();
  466. GM_registerMenuCommand(currentLanguage['settings'], () => {
  467. const panel = document.getElementById('settingsPanel');
  468. panel.style.display = 'block';
  469. });
  470.  
  471. function addGlobalStyle(css) {
  472. var head, style;
  473. head = document.getElementsByTagName('head')[0];
  474. if (!head) { return; }
  475. style = document.createElement('style');
  476. style.type = 'text/css';
  477. style.innerHTML = css;
  478. head.appendChild(style);
  479. }
  480.  
  481. var cssRules = '';
  482.  
  483. if (settings.hideSelectors) {
  484. const observer = new MutationObserver(mutations => {
  485. mutations.forEach(mutation => {
  486. const elements = document.querySelectorAll('.css-175oi2r.r-1habvwh.r-eqz5dr.r-uaa2di.r-1mmae3n.r-3pj75a.r-bnwqim');
  487. elements.forEach(element => {
  488. const parentDiv = element.closest('div');
  489. if (parentDiv) {
  490. parentDiv.remove();
  491. }
  492. });
  493. });
  494. });
  495.  
  496. observer.observe(document.body, { childList: true, subtree: true });
  497. }
  498.  
  499. if (settings.hideGrok) {
  500. const targetPathD = "M2.205 7.423L11.745 21h4.241L6.446 7.423H2.204zm4.237 7.541L2.2 21h4.243l2.12-3.017-2.121-3.02zM16.957 0L9.624 10.435l2.122 3.02L21.2 0h-4.243zm.767 6.456V21H21.2V1.51l-3.476 4.946z";
  501. const targetGrokImageGenPathD = "M12.745 20.54l10.97-8.19c.539-.4 1.307-.244 1.564.38 1.349 3.288.746 7.241-1.938 9.955-2.683 2.714-6.417 3.31-9.83 1.954l-3.728 1.745c5.347 3.697 11.84 2.782 15.898-1.324 3.219-3.255 4.216-7.692 3.284-11.693l.008.009c-1.351-5.878.332-8.227 3.782-13.031L33 0l-4.54 4.59v-.014L12.743 20.544M10.48 22.531c-3.837-3.707-3.175-9.446.1-12.755 2.42-2.449 6.388-3.448 9.852-1.979l3.72-1.737c-.67-.49-1.53-1.017-2.515-1.387-4.455-1.854-9.789-.931-13.41 2.728-3.483 3.523-4.579 8.94-2.697 13.561 1.405 3.454-.899 5.898-3.22 8.364C1.49 30.2.666 31.074 0 32l10.478-9.466";
  502. const observer = new MutationObserver(mutations => {
  503. mutations.forEach(mutation => {
  504. const svgs = document.querySelectorAll('svg[aria-hidden="true"].r-4qtqp9');
  505. svgs.forEach(svg => {
  506. const path = svg.querySelector('path');
  507. if (path && path.getAttribute('d') === targetPathD) {
  508. const container = svg.closest('button') || svg.closest('div');
  509. if (container) {
  510. container.remove();
  511. }
  512. }
  513. });
  514.  
  515. const grokImgGenButtons = document.querySelectorAll('button[data-testid="grokImgGen"]');
  516. grokImgGenButtons.forEach(button => {
  517. button.remove();
  518. });
  519. });
  520. });
  521. observer.observe(document.body, { childList: true, subtree: true });
  522.  
  523. GM_addStyle(`
  524. a[href="/i/grok"] {
  525. display: none !important;
  526. }
  527. .css-175oi2r.r-1867qdf.r-xnswec.r-13awgt0.r-1ce3o0f.r-1udh08x.r-u8s1d.r-13qz1uu.r-173mn98.r-1e5uvyk.r-ii8lfi.r-40lpo0.r-rs99b7.r-12jitg0 {
  528. display: none;
  529. }
  530. `);
  531. }
  532. if (settings.hideCommunities) {
  533. const targetCommunitiesPathD = "M7.501 19.917L7.471 21H.472l.029-1.027c.184-6.618 3.736-8.977 7-8.977.963 0 1.95.212 2.87.672-.444.478-.851 1.03-1.212 1.656-.507-.204-1.054-.329-1.658-.329-2.767 0-4.57 2.223-4.938 6.004H7.56c-.023.302-.05.599-.059.917zm15.998.056L23.528 21H9.472l.029-1.027c.184-6.618 3.736-8.977 7-8.977s6.816 2.358 7 8.977zM21.437 19c-.367-3.781-2.17-6.004-4.938-6.004s-4.57 2.223-4.938 6.004h9.875zm-4.938-9c-.799 0-1.527-.279-2.116-.73-.836-.64-1.384-1.638-1.384-2.77 0-1.93 1.567-3.5 3.5-3.5s3.5 1.57 3.5 3.5c0 1.132-.548 2.13-1.384 2.77-.589.451-1.317.73-2.116.73zm-1.5-3.5c0 .827.673 1.5 1.5 1.5s1.5-.673 1.5-1.5-.673-1.5-1.5-1.5-1.5.673-1.5 1.5zM7.5 3C9.433 3 11 4.57 11 6.5S9.433 10 7.5 10 4 8.43 4 6.5 5.567 3 7.5 3zm0 2C6.673 5 6 5.673 6 6.5S6.673 8 7.5 8 9 7.327 9 6.5 8.327 5 7.5 5z";
  534.  
  535. const observerCommunities = new MutationObserver(mutations => {
  536. mutations.forEach(() => {
  537. const svgs = document.querySelectorAll('svg[aria-hidden="true"].r-4qtqp9');
  538. svgs.forEach(svg => {
  539. const path = svg.querySelector('path');
  540. if (path && path.getAttribute('d') === targetCommunitiesPathD) {
  541. const container = svg.closest('a') || svg.closest('div');
  542. if (container) {
  543. container.remove();
  544. }
  545. }
  546. });
  547. });
  548. });
  549. observerCommunities.observe(document.body, { childList: true, subtree: true });
  550. }
  551. if (settings.hidePremiumSignUp) {
  552. cssRules += 'a[href="/i/premium_sign_up"] { display: none !important; }';
  553. }
  554. if (settings.hideVerifiedOrgs) {
  555. cssRules += 'a[href="/i/verified-orgs-signup"] { display: none !important; }';
  556. }
  557. if (settings.hideother) {
  558. cssRules += 'a[href="/jobs"] { display: none !important; }';
  559. cssRules += '.css-175oi2r.r-l00any.r-109y4c4.r-kuekak { display: none !important; }';
  560. cssRules += 'a.css-175oi2r.r-5oul0u.r-knv0ih.r-faml9v.r-2dysd3.r-13qz1uu.r-o7ynqc.r-6416eg.r-1ny4l3l.r-1loqt21 { display: none !important; }';
  561. cssRules += 'a.css-175oi2r.r-5oul0u.r-1wzrnnt.r-1c4vpko.r-1c7gwzm.r-13qz1uu.r-o7ynqc.r-6416eg.r-1ny4l3l.r-1loqt21 { display: none !important; }';
  562. }
  563. if (settings.hideExplore) {
  564. cssRules += 'a[href="/explore"] { display: none !important; }';
  565. }
  566. if (settings.hideNotifications) {
  567. cssRules += 'a[href="/notifications"] { display: none !important; }';
  568. }
  569. if (settings.hideBookmarks) {
  570. cssRules += 'a[href="/i/bookmarks"] { display: none !important; }';
  571. }
  572. if (settings.hideMessages) {
  573. cssRules += 'a[href="/messages"] { display: none !important; }';
  574. }
  575. if (settings.hideRightColumn) {
  576. cssRules += '.css-175oi2r.r-yfoy6g.r-18bvks7.r-1867qdf.r-1phboty.r-rs99b7.r-1ifxtd0.r-1udh08x { display: none !important; }';
  577. cssRules += '.css-175oi2r.r-18bvks7.r-1867qdf.r-1phboty.r-1ifxtd0.r-1udh08x.r-1niwhzg.r-1yadl64 { display: none !important; }';
  578. }
  579. if (settings.useLargerCSS) {
  580. cssRules += `.r-1ye8kvj { max-width: ${settings.cssWidth}px !important; }`;
  581. }
  582.  
  583. addGlobalStyle(cssRules);
  584. })();