// ==UserScript== // @name X/Twitter Clean menu and sidebar (Supports multiple language) // @name:ja X/Twitter きれいなメニューとサイドバー(多言語対応) // @name:zh-TW X/Twitter 乾淨的選單和側邊欄(支持多種語言) // @name:zh-cn X/Twitter 干净的选单和侧边栏(支持多种语言) // @version 2.0 // @description hidden Menu,Grok,Premium subscription,Verified Orgs,other,Explore,Notifications,Messages,Bookmarks and Customizable Settings // @description:ja 清潔なメニュー、Grok、高度なサブスクリプション、認証済み組織、他の、探索、通知、メッセージ、ブックマーク、およびカスタム設定 // @description:zh-tw 乾淨的 選單、Grok、高級訂閱、已認證組織、其他、探索、通知、訊息、書籤和可自訂設定 // @description:zh-cn 干净的 选单、Grok、高级订阅、已认证组织、其他、探索、通知、私信、书签和可自订设定 // @license MIT // @author movwei // @match https://x.com/* // @match https://twitter.com/* // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_getValue // @grant GM_addStyle // @namespace https://greasyfork.org/users/1041101 // @downloadURL none // ==/UserScript== (function() { 'use strict'; const defaultSettings = { hideGrok: true, hidePremiumSignUp: true, hideSelectors: true, hideVerifiedOrgs: true, hideother: true, hideExplore: false, hideNotifications: false, hideBookmarks: false, hideMessages: false, hideCommunities: false, }; const settings = { hideGrok: GM_getValue('hideGrok', defaultSettings.hideGrok), hidePremiumSignUp: GM_getValue('hidePremiumSignUp', defaultSettings.hidePremiumSignUp), hideSelectors: GM_getValue('hideSelectors', defaultSettings.hideSelectors), hideVerifiedOrgs: GM_getValue('hideVerifiedOrgs', defaultSettings.hideVerifiedOrgs), hideother: GM_getValue('hideother', defaultSettings.hideother), hideExplore: GM_getValue('hideExplore', defaultSettings.hideExplore), hideNotifications: GM_getValue('hideNotifications', defaultSettings.hideNotifications), hideBookmarks: GM_getValue('hideBookmarks', defaultSettings.hideBookmarks), hideCommunities: GM_getValue('hideCommunities', defaultSettings.hideCommunities), hideMessages: GM_getValue('hideMessages', defaultSettings.hideMessages), }; // 多語言支持 const language = navigator.language || navigator.userLanguage; const languages = { 'en': { 'hideGrok': 'Hide Grok', 'hidePremiumSignUp': 'Hide Premium Sign-up', 'hideSelectors': 'Hide Subscribe Message', 'hideVerifiedOrgs': 'Hide Verified Orgs', 'hideExplore': 'Hide Explore', 'hideNotifications': 'Hide Notifications', 'hideMessages': 'Hide Messages', 'hideCommunities': 'Hide Communities', 'hideother': 'Hide other', 'settings': 'Settings', 'saveRefresh': 'Save & refresh', 'close': 'Close' }, 'zh-TW': { 'hideGrok': '隱藏 Grok', 'hidePremiumSignUp': '隱藏 高級訂閱', 'hideSelectors': '隱藏 訂閱訊息', 'hideVerifiedOrgs': '隱藏 已認證組織', 'hideExplore': '隱藏 探索', 'hideNotifications': '隱藏 通知', 'hideMessages': '隱藏 訊息', 'hideCommunities': '隱藏 社群', 'hideBookmarks': '隱藏 書籤', 'hideother': '隱藏 其他', 'settings': '設定', 'saveRefresh': '保存並刷新', 'close': '關閉' }, 'zh-CN': { 'hideGrok': '隐藏 Grok', 'hidePremiumSignUp': '隐藏 高级订阅', 'hideSelectors': '隐藏 订阅消息', 'hideVerifiedOrgs': '隐藏 已认证组织', 'hideExplore': '隐藏 探索', 'hideNotifications': '隐藏 通知', 'hideMessages': '隐藏 私信', 'hideCommunities': '隐藏 社群', 'hideBookmarks': '隐藏 书签', 'hideother': '隐藏 其他', 'settings': '设置', 'saveRefresh': '保存并刷新', 'close': '关闭' }, 'ja': { 'hideGrok': 'Grokを非表示', 'hidePremiumSignUp': 'プレミアムサインアップを非表示', 'hideSelectors': 'サブスクライブメッセージを非表示', 'hideVerifiedOrgs': '認証済み組織を非表示', 'hideExplore': '話題を検索を非表示', 'hideNotifications': '通知を非表示', 'hideMessages': 'メッセージを非表示', 'hideCommunities': 'コミュニティを非表示', 'hideBookmarks': 'ブックマークを非表示', 'hideother': '他のを非表示', 'settings': '設定', 'saveRefresh': '保存してリフレッシュ', 'close': '閉じる' }, }; const currentLanguage = languages[language] || languages['en']; function createSettingsPanel() { const panel = document.createElement('div'); panel.id = 'settingsPanel'; panel.innerHTML = `

${currentLanguage['settings']}











`; document.body.appendChild(panel); document.getElementById('saveSettingsButton').addEventListener('click', saveSettings); document.getElementById('closeSettingsButton').addEventListener('click', () => { document.getElementById('settingsPanel').style.display = 'none'; }); } function saveSettings() { settings.hideGrok = document.getElementById('hideGrokCheckbox').checked; settings.hidePremiumSignUp = document.getElementById('hidePremiumSignUpCheckbox').checked; settings.hideSelectors = document.getElementById('hideSelectorsCheckbox').checked; settings.hideVerifiedOrgs = document.getElementById('hideVerifiedOrgsCheckbox').checked; settings.hideExplore = document.getElementById('hideExploreCheckbox').checked; settings.hideNotifications = document.getElementById('hideNotificationsCheckbox').checked; settings.hideBookmarks = document.getElementById('hideBookmarksCheckbox').checked; settings.hideMessages = document.getElementById('hideMessagesCheckbox').checked; settings.hideCommunities = document.getElementById('hideCommunitiesCheckbox').checked; settings.hideother = document.getElementById('hideotherCheckbox').checked; GM_setValue('hideGrok', settings.hideGrok); GM_setValue('hidePremiumSignUp', settings.hidePremiumSignUp); GM_setValue('hideSelectors', settings.hideSelectors); GM_setValue('hideVerifiedOrgs', settings.hideVerifiedOrgs); GM_setValue('hideExplore', settings.hideExplore); GM_setValue('hideNotifications', settings.hideNotifications); GM_setValue('hideBookmarks', settings.hideBookmarks); GM_setValue('hideMessages', settings.hideMessages); GM_setValue('hideCommunities', settings.hideCommunities); GM_setValue('hideother', settings.hideother); location.reload(); } GM_addStyle(` #settingsPanel { width: 250px; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: white; border: 1px solid #ccc; padding: 20px; z-index: 10000; display: none; box-shadow: 0 4px 8px rgba(0,0,0,0.1); border-radius: 8px; } #settingsPanelContent { display: flex; flex-direction: column; align-items: flex-start; width: 100%; } #settingsPanel h2 { margin: 0 0 15px 0; font-size: 18px; color: #333; text-align: center; width: 100%; } #settingsPanel label { margin: 5px 0; font-size: 14px; color: #333; } #settingsPanel button { margin-top: 10px; padding: 8px 15px; font-size: 14px; color: white; background-color: #007BFF; border: none; border-radius: 4px; cursor: pointer; width: 100%; } #settingsPanel button#closeSettingsButton { background-color: #6c757d; } `); createSettingsPanel(); GM_registerMenuCommand(currentLanguage['settings'], () => { const panel = document.getElementById('settingsPanel'); panel.style.display = 'block'; }); function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (!head) { return; } style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild(style); } var cssRules = ''; if (settings.hideSelectors) { const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { const elements = document.querySelectorAll('.css-175oi2r.r-1habvwh.r-eqz5dr.r-uaa2di.r-1mmae3n.r-3pj75a.r-bnwqim'); elements.forEach(element => { const parentDiv = element.closest('div'); if (parentDiv) { parentDiv.remove(); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); } if (settings.hideGrok) { 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"; const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { const svgs = document.querySelectorAll('svg[aria-hidden="true"].r-4qtqp9'); svgs.forEach(svg => { const path = svg.querySelector('path'); if (path && path.getAttribute('d') === targetPathD) { const container = svg.closest('button') || svg.closest('div'); if (container) { container.remove(); } } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); GM_addStyle(` a[href="/i/grok"] { display: none !important; } .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 { display: none; } `); } if (settings.hideCommunities) { 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"; const observerCommunities = new MutationObserver(mutations => { mutations.forEach(() => { const svgs = document.querySelectorAll('svg[aria-hidden="true"].r-4qtqp9'); svgs.forEach(svg => { const path = svg.querySelector('path'); if (path && path.getAttribute('d') === targetCommunitiesPathD) { const container = svg.closest('a') || svg.closest('div'); if (container) { container.remove(); } } }); }); }); observerCommunities.observe(document.body, { childList: true, subtree: true }); } if (settings.hidePremiumSignUp) { cssRules += 'a[href="/i/premium_sign_up"] { display: none !important; }'; } if (settings.hideVerifiedOrgs) { cssRules += 'a[href="/i/verified-orgs-signup"] { display: none !important; }'; } if (settings.hideother) { cssRules += 'a[href="/jobs"] { display: none !important; }'; cssRules += '.css-175oi2r.r-l00any.r-109y4c4.r-kuekak { display: none; }'; cssRules += 'a.css-175oi2r.r-5oul0u.r-knv0ih.r-faml9v.r-2dysd3.r-13qz1uu.r-o7ynqc.r-6416eg.r-1ny4l3l.r-1loqt21 { display: none; }'; cssRules += 'a.css-175oi2r.r-5oul0u.r-1wzrnnt.r-1c4vpko.r-1c7gwzm.r-13qz1uu.r-o7ynqc.r-6416eg.r-1ny4l3l.r-1loqt21 { display: none; }'; } if (settings.hideExplore) { cssRules += 'a[href="/explore"] { display: none !important; }'; } if (settings.hideNotifications) { cssRules += 'a[href="/notifications"] { display: none !important; }'; } if (settings.hideBookmarks) { cssRules += 'a[href="/i/bookmarks"] { display: none !important; }'; } if (settings.hideMessages) { cssRules += 'a[href="/messages"] { display: none !important; }'; } addGlobalStyle(cssRules); })();