您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds dragable border for google docs outline in order to view long headings.
// ==UserScript== // @name Google Docs Outline Expander // @namespace http://tampermonkey.net/ // @version 1.0 // @description Adds dragable border for google docs outline in order to view long headings. // @match https://docs.google.com/document/* // @license MIT // @grant none // ==/UserScript== (function() { 'use strict'; const HANDLE_WIDTH = 10; const VISIBILITY_THRESHOLD = 20; // Observe DOM until sidebar content ("Document tabs") appears const observer = new MutationObserver((mutations, obs) => { const readyIndicator = document.querySelector('#kix-outlines-widget-header-text-chaptered'); if (readyIndicator) { obs.disconnect(); initResizer(); } }); observer.observe(document.body, { childList: true, subtree: true }); function initResizer() { const sidebar = document.querySelector('.left-sidebar-container'); if (!sidebar) { console.error('Sidebar container not found.'); return; } let handle = sidebar.querySelector('.left-sidebar-resizer-drag-handle'); if (!handle) { handle = document.createElement('div'); handle.className = 'left-sidebar-resizer-drag-handle'; sidebar.appendChild(handle); } Object.assign(handle.style, { display: 'block', position: 'absolute', top: '0', width: HANDLE_WIDTH + 'px', height: '100%', cursor: 'ew-resize', zIndex: '1000', background: 'rgba(0,0,0,0.1)', opacity: '0', transition: 'opacity 0.2s', pointerEvents: 'none' }); const initialWidth = sidebar.offsetWidth; handle.style.left = (initialWidth - HANDLE_WIDTH) + 'px'; let isResizing = false; let startX, startWidth; handle.addEventListener('mousedown', function(e) { isResizing = true; startX = e.clientX; startWidth = sidebar.offsetWidth; handle.style.opacity = '1'; handle.style.pointerEvents = 'auto'; e.preventDefault(); }); document.addEventListener('mousemove', function(e) { if (isResizing) { const diffX = e.clientX - startX; const newWidth = startWidth + diffX; if (newWidth > 100) { sidebar.style.width = newWidth + 'px'; handle.style.left = (newWidth - HANDLE_WIDTH) + 'px'; const content = sidebar.querySelector('.left-sidebar-container-content'); if (content) { content.style.width = (newWidth - HANDLE_WIDTH) + 'px'; } } } else { const rect = sidebar.getBoundingClientRect(); if (e.clientX >= rect.right - VISIBILITY_THRESHOLD && e.clientX <= rect.right + 50) { handle.style.opacity = '1'; handle.style.pointerEvents = 'auto'; } else { handle.style.opacity = '0'; handle.style.pointerEvents = 'none'; } } }); document.addEventListener('mouseup', function() { if (isResizing) { isResizing = false; } }); handle.addEventListener('mouseenter', function() { handle.style.opacity = '1'; handle.style.pointerEvents = 'auto'; }); handle.addEventListener('mouseleave', function() { if (!isResizing) { handle.style.opacity = '0'; handle.style.pointerEvents = 'none'; } }); } })();