Greasy Fork

Greasy Fork is available in English.

Twitter Minimal 阅读优化、去除干扰

为大屏优化Twitter阅读体验:宽屏布局、自动展开、字体美化、简化界面 (隐藏曝光量、转发数等干扰信息)

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Twitter Minimal 阅读优化、去除干扰  
// @author       Efficient Lazy Panda
// @description  为大屏优化Twitter阅读体验:宽屏布局、自动展开、字体美化、简化界面 (隐藏曝光量、转发数等干扰信息)
// @version      1.2
// @namespace   https://example.com/efficient-lazy-panda
// @match        https://twitter.com/*
// @match        https://x.com/*
// @run-at       document-start
// @grant        GM_addStyle 
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // 添加自定义CSS样式
    GM_addStyle(`
        /* 宽屏布局优化 - 响应式设计 */
        [data-testid="primaryColumn"] {
            max-width: 1000px !important;
        }
        
        /* 推文内容区域扩展 */
        article[data-testid="tweet"] {
            max-width: none !important;
            padding: 12px 24px !important;
        }
        
        /* 推文文本区域宽度 - 保守设置,保持响应式 */
        [data-testid="tweetText"] {
            max-width: none !important;
        }
        
        /* 应用 iA Writer Mono S 字体 */
        [data-testid="tweetText"],
        [data-testid="tweetText"] span,
        [data-testid="tweetText"] div {
            font-family: "iA Writer Mono S", "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, "Courier New", monospace !important;
            font-size: 16px !important;
            line-height: 1.6 !important;
            letter-spacing: 0.3px !important;
        }
        
        /* 隐藏不需要的指标 */
        [data-testid="analytics"],
        [data-testid="views"],
        [aria-label*="次查看"],
        [aria-label*="views"],
        [data-testid="share"],
        [aria-label*="分享"],
        [aria-label*="Share"] {
            display: none !important;
        }
        
        /* 按钮区域处理 - 保持原位置,只隐藏转发按钮 */
        [data-testid="tweet"] [role="group"]:last-child {
            display: flex !important;
            justify-content: space-between !important;
        }
        
        /* 只隐藏转发按钮,保留like和bookmark */
        [data-testid="retweet"],
        [data-testid="unretweet"] {
            display: none !important;
        }
        
        /* 确保like和bookmark按钮显示 */
        [data-testid="like"],
        [data-testid="unlike"],
        [data-testid="bookmark"],
        [data-testid="removeBookmark"] {
            display: flex !important;
        }
        
        /* 自动展开的推文样式 */
        [data-testid="tweetText"] > div {
            max-height: none !important;
            height: auto !important;
            overflow: visible !important;
        }
        
        /* 移除文本截断限制 */
        [data-testid="tweetText"] div[style*="height"] {
            height: auto !important;
            max-height: none !important;
        }
        
        /* 确保长推文能够完全显示 */
        [data-testid="tweet"] [dir="ltr"] {
            max-height: none !important;
            overflow: visible !important;
        }
        
        /* 确保媒体内容也适应宽屏 */
        [data-testid="tweetPhoto"],
        [data-testid="videoPlayer"] {
            max-width: 100% !important;
        }
        
        /* 响应式设计 - 确保小屏幕正常显示 */
        @media (max-width: 1000px) {
            [data-testid="primaryColumn"] {
                max-width: 100% !important;
            }
            
            article[data-testid="tweet"] {
                padding: 8px 16px !important;
            }
        }
        
        @media (max-width: 768px) {
            [data-testid="primaryColumn"] {
                max-width: 100% !important;
            }
            
            article[data-testid="tweet"] {
                padding: 6px 12px !important;
            }
        }
    `);

    // 自动展开"显示更多"功能 
    function autoExpandTweets() {
        try {
            // 查找特定的"显示更多"按钮
            const showMoreButtons = document.querySelectorAll('[role="button"]:not([data-expanded])');
            let expandedCount = 0;
            
            showMoreButtons.forEach(button => {
                if (expandedCount >= 5) return; // 限制每次最多处理5个
                
                const text = button.textContent.trim();
                if (text === '显示更多' || text === 'Show more' || 
                    text === '显示此线程' || text === 'Show this thread') {
                    
                    button.setAttribute('data-expanded', 'true');
                    expandedCount++;
                    
                    setTimeout(() => {
                        try {
                            button.click();
                            console.log('自动展开:', text);
                        } catch (e) {
                            console.log('展开失败:', e);
                        }
                    }, 300 * expandedCount); // 错开点击时间
                }
            });

            // 通过CSS移除高度限制
            const tweets = document.querySelectorAll('[data-testid="tweet"]');
            tweets.forEach(tweet => {
                const textElements = tweet.querySelectorAll('[data-testid="tweetText"] > div');
                textElements.forEach(element => {
                    if (element.style.height && element.style.height !== 'auto') {
                        element.style.height = 'auto';
                        element.style.maxHeight = 'none';
                    }
                });
            });
            
        } catch (error) {
            console.log('自动展开出错:', error);
        }
    }

    // 不再重排按钮,保持原始位置确保可点击性

    function initObserver() {
        const observer = new MutationObserver((mutations) => {
            mutations.forEach((mutation) => {
                if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
                    // 延迟执行以确保元素完全加载
                    setTimeout(() => {
                        autoExpandTweets();
                    }, 200);
                }
            });
        });

        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
    }

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', () => {
            setTimeout(() => {
                initObserver();
                autoExpandTweets(); 
            }, 1500);
        });
    } else {
        setTimeout(() => {
            initObserver();
            autoExpandTweets(); 
        }, 1500);
    }

    setInterval(() => {
        autoExpandTweets();
    }, 5000); // 改为5秒一次,减少性能影响

})();