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

hidden Menu,Grok,Premium subscription,Explore,Notifications,Messages,Bookmarks and Customizable Settings

当前为 2024-06-11 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         X/Twitter Clean menu and sidebar (Supports multiple language)
// @version      1.0
// @description  hidden Menu,Grok,Premium subscription,Explore,Notifications,Messages,Bookmarks and Customizable Settings
// @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
// ==/UserScript==

(function() {
    'use strict';

    const defaultSettings = {
        hideGrok: true,
        hidePremiumSignUp: true,
        hideSelectors: true,
        hideExplore: false,
        hideNotifications: false,
        hideBookmarks: false,
        hideMessages: false
    };

    const settings = {
        hideGrok: GM_getValue('hideGrok', defaultSettings.hideGrok),
        hidePremiumSignUp: GM_getValue('hidePremiumSignUp', defaultSettings.hidePremiumSignUp),
        hideSelectors: GM_getValue('hideSelectors', defaultSettings.hideSelectors),
        hideExplore: GM_getValue('hideExplore', defaultSettings.hideExplore),
        hideNotifications: GM_getValue('hideNotifications', defaultSettings.hideNotifications),
        hideBookmarks: GM_getValue('hideBookmarks', defaultSettings.hideBookmarks),
        hideMessages: GM_getValue('hideMessages', defaultSettings.hideMessages)
    };


    function createSettingsPanel() {
        const panel = document.createElement('div');
        panel.id = 'settingsPanel';
        panel.innerHTML = `
            <div id="settingsPanelContent">
                <h2>Settings</h2>
                <label><input type="checkbox" id="hideGrokCheckbox" ${settings.hideGrok ? 'checked' : ''}> Hide Grok</label><br>
                <label><input type="checkbox" id="hidePremiumSignUpCheckbox" ${settings.hidePremiumSignUp ? 'checked' : ''}> Hide Premium Sign-up</label><br>
                <label><input type="checkbox" id="hideSelectorsCheckbox" ${settings.hideSelectors ? 'checked' : ''}> Hide Subscribe Message</label><br>
                <label><input type="checkbox" id="hideExploreCheckbox" ${settings.hideExplore ? 'checked' : ''}> Hide Explore</label><br>
                <label><input type="checkbox" id="hideNotificationsCheckbox" ${settings.hideNotifications ? 'checked' : ''}> Hide Notifications</label><br>
                <label><input type="checkbox" id="hideMessagesCheckbox" ${settings.hideMessages ? 'checked' : ''}> Hide Messages</label><br>
                <label><input type="checkbox" id="hideBookmarksCheckbox" ${settings.hideBookmarks ? 'checked' : ''}> Hide Bookmarks</label><br>
                <button id="saveSettingsButton">Save & refresh</button>
                <button id="closeSettingsButton">Close</button>
            </div>
        `;
        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.hideExplore = document.getElementById('hideExploreCheckbox').checked;
        settings.hideNotifications = document.getElementById('hideNotificationsCheckbox').checked;
        settings.hideBookmarks = document.getElementById('hideBookmarksCheckbox').checked;
        settings.hideMessages = document.getElementById('hideMessagesCheckbox').checked;

        GM_setValue('hideGrok', settings.hideGrok);
        GM_setValue('hidePremiumSignUp', settings.hidePremiumSignUp);
        GM_setValue('hideSelectors', settings.hideSelectors);
        GM_setValue('hideExplore', settings.hideExplore);
        GM_setValue('hideNotifications', settings.hideNotifications);
        GM_setValue('hideBookmarks', settings.hideBookmarks);
        GM_setValue('hideMessages', settings.hideMessages);
        location.reload();
    }


    GM_addStyle(`
        #settingsPanel {
            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;
            max-width: 300px;
        }

        #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('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 phrases = [
        'Premium\'a Abone Ol', // 土耳其文 - Türkçe
        'Abonner på Premium', // 丹麥文 - dansk
        '', // 巴斯克文 (測試版) - euskara
        'プレミアムにサブスクライブ', // 日文 - 日本語
        '', // 加利西亞文 (測試版) - galego
        'Subscriu-te a Premium', // 加泰蘭文 - català
        'પ્રીમિયમ પર સબ્સ્ક્રાઇબ કરો', // 古吉拉特文 - ગુજરાતી
        'Fizess elő a Premiumra!', // 匈牙利文 - magyar
        'Berlangganan Premium', // 印尼文 - Indonesia
        'Premium को सब्सक्राइब करें', // 印地文 - हिन्दी
        'Suscríbete a Premium', // 西班牙文 - español
        'Pretplatite se na Premium', // 克羅埃西亞文 - hrvatski
        'Premiumಗೆ ಸಬ್‌ಸ್ರೈಬ್ ಮಾಡಿ', // 坎那達文 - ಕನ್ನಡ
        'הרשמה ל-Premium', // 希伯來文 - עברית
        'Εγγραφή στο Premium', // 希臘文 - Ελληνικά
        'Premium-க்குச் சப்ஸ்கிரைப் செய்', // 坦米爾文 - தமிழ்
        'Premium-এ সাবস্ক্রাইব করুন', // 孟加拉文 - বাংলা
        'Abonnez‑vous à Premium', // 法文 - français
        'اشتراک در Premium', // 波斯文 - فارسی
        'Zasubskrybuj usługę Premium', // 波蘭文 - polski
        'Tilaa Premium', // 芬蘭文 - suomi
        'الاشتراك في Premium', // 阿拉伯文 - العربية
        'الاشتراك في Premium', // 阿拉伯文 (陰性) - العربية (مؤنث)
        'Подпишитесь на Premium', // 俄文 - русский
        'Абонирайте се за Premium', // 保加利亞文 - български
        'Subscribe to Premium', // 英文 - English
        'Subscribe to Premium', // 英文(英國) - British English
        '', // 挪威文 - norsk
        'สมัครสมาชิก Premium', // 泰文 - ไทย
        'Передплатити Premium', // 烏克蘭文 - українська
        '', // 烏都文 (測試版) - اردو
        'Langgan Premium', // 馬來文 - Melayu
        'Premium ची सदस्यता घ्या', // 馬拉地文 - मराठी
        'Přihlaste se k odběru předplatného Premium', // 捷克文 - čeština X
        'Abonneren op Premium', // 荷蘭文 - Nederlands
        'Zaregistrujte sa do služby Premium', // 斯洛伐克文 - slovenčina
        'Mag-subscribe sa Premium', // 菲律賓文 - Filipino
        'Đăng ký gói Premium', // 越南文 - Tiếng Việt
        'Претплати се на Premium', // 塞爾維亞文 - српски
        '', // 愛爾蘭文 (測試版) - Gaeilge
        'Prenumerera på Premium', // 瑞典文 - svenska
        'Abbonati a Premium', // 義大利文 - italiano
        'Assine o Premium', // 葡萄牙文 - português
        'Premium abonnieren', // 德文 - Deutsch
        '訂閱 Premium', // 繁體中文
        'Premium 구독하기', // 韓文 - 한국어
        '订阅 Premium', // 简体中文
        'Abonează-te la Premium', // 羅馬尼亞文 - română
    ];


    var selectors = phrases.map(function(phrase) {
        if (phrase !== '') {
            return 'aside[aria-label="' + phrase + '"]';
        } else {
            return '';
        }
    }).filter(selector => selector !== '').join(', ');

    var cssRules = '';
    if (settings.hideSelectors) {
        cssRules += selectors + '{ display: none !important; }';
    }
    if (settings.hideGrok) {
        cssRules += 'a[href="/i/grok"] { display: none !important; }';
    }
    if (settings.hidePremiumSignUp) {
        cssRules += 'a[href="/i/premium_sign_up"] { display: none !important; }';
    }
    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);
})();