Folo - 移除AI对话框

移除Folo界面右侧的AI对话框

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Folo - Remove AI Dialog
// @name:zh-CN   Folo - 移除AI对话框
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Remove the right-side AI dialog from Folo interface
// @description:zh-CN 移除Folo界面右侧的AI对话框
// @author       ObenK
// @license      MIT
// @match        https://app.folo.is/*
// @match        https://follow.is/*
// @match        http://localhost:*/*
// @grant        GM_addStyle
// @grant        GM_getValue
// @grant        GM_setValue
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    // CSS样式来隐藏AI对话框
    const hideAICSS = `
        /* 隐藏右侧AI对话框区域 */
        .relative.flex.h-full.min-w-0.flex-col.overflow-hidden.bg-theme-background.flex-1,
        .relative.flex.h-full.min-w-0.flex-col.overflow-hidden.bg-background,
        [data-testid="chat-input-container"],
        [data-testid="chat-input"] {
            display: none !important;
        }
        
        /* 调整中间内容区域宽度,占满AI对话框的空间 */
        .relative.flex.h-full.flex-col.overflow-hidden.border-r.flex-none {
            flex-basis: 100% !important;
            min-width: 100% !important;
        }
        
        /* 隐藏AI相关的图标和按钮 */
        .i-mgc-ai-cute-fi,
        .i-mgc-folo-bot-original,
        [aria-label*="AI"],
        [aria-label*="ai"],
        [title*="AI"],
        [title*="ai"] {
            display: none !important;
        }
        
        /* 隐藏聊天相关的元素 */
        .mx-auto.w-full.max-w-4xl,
        .flex.size-full.flex-col.\@container,
        [style*="--ai-chat-layout-width"] {
            display: none !important;
        }
        
        /* 调整主容器布局 */
        .flex.h-full.min-w-0 {
            flex: 1 1 100% !important;
        }
        
        /* 隐藏特定的AI聊天容器 */
        main .relative.h-full.min-w-0.flex-1 > .relative.h-full.min-w-0.min-h-full.w-full.flex-none:last-child {
            display: none !important;
        }
        
        /* 确保中间内容区域扩展 */
        .relative.h-full.min-w-0.flex-1 {
            width: 100% !important;
        }
    `;

    // 添加CSS样式
    GM_addStyle(hideAICSS);

    // 动态移除AI对话框的函数
    function removeAIDialog() {
        // 查找并移除AI对话框相关的元素
        const aiSelectors = [
            '.relative.flex.h-full.min-w-0.flex-col.overflow-hidden.bg-theme-background.flex-1',
            '.relative.flex.h-full.min-w-0.flex-col.overflow-hidden.bg-background',
            '[data-testid="chat-input-container"]',
            '[data-testid="chat-input"]',
            '.mx-auto.w-full.max-w-4xl',
            '[style*="--ai-chat-layout-width"]'
        ];

        aiSelectors.forEach(selector => {
            const elements = document.querySelectorAll(selector);
            elements.forEach(el => {
                if (el && !el.hasAttribute('data-ai-removed')) {
                    el.style.display = 'none';
                    el.setAttribute('data-ai-removed', 'true');
                }
            });
        });

        // 调整布局
        const middleColumn = document.querySelector('.relative.flex.h-full.flex-col.overflow-hidden.border-r.flex-none');
        if (middleColumn) {
            middleColumn.style.flexBasis = '100%';
            middleColumn.style.minWidth = '100%';
        }

        // 移除AI相关的按钮和图标
        const aiButtons = document.querySelectorAll('[aria-label*="AI"], [aria-label*="ai"], [title*="AI"], [title*="ai"]');
        aiButtons.forEach(btn => btn.style.display = 'none');
    }

    // 页面加载完成后执行
    function init() {
        // 立即执行一次
        removeAIDialog();
        
        // 监听DOM变化,防止AI对话框动态加载
        const observer = new MutationObserver(function(mutations) {
            let shouldRemove = false;
            mutations.forEach(function(mutation) {
                mutation.addedNodes.forEach(function(node) {
                    if (node.nodeType === 1) { // Element node
                        const element = node;
                        if (element.matches && (
                            element.matches('.relative.flex.h-full.min-w-0.flex-col.overflow-hidden') ||
                            element.matches('[data-testid*="chat"]') ||
                            element.querySelector('[data-testid*="chat"]') ||
                            element.querySelector('.mx-auto.w-full.max-w-4xl')
                        )) {
                            shouldRemove = true;
                        }
                    }
                });
            });
            
            if (shouldRemove) {
                setTimeout(removeAIDialog, 100);
            }
        });

        // 开始观察
        observer.observe(document.body, {
            childList: true,
            subtree: true
        });

        // 页面加载完成后再次执行
        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', () => {
                setTimeout(removeAIDialog, 500);
            });
        } else {
            setTimeout(removeAIDialog, 500);
        }
    }

    // 如果页面已经加载,直接执行
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }

    // 定期检查,确保AI对话框不会重新出现
    setInterval(removeAIDialog, 2000);

    console.log('Folo AI Dialog Remover: Script loaded and running');
})();