- // ==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);
- })();