Folo - Remove AI Dialog

Remove the right-side AI dialog from Folo interface

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 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');
})();