// ==UserScript== // @name 智谱清言(ChatGLM) - 侧边栏会话跳转导航 | ChatGLM Sidebar Navigator // @namespace https://github.com/sakura11111111111111/ChatGLM-Sidebar-Jump-Axis // @version 1.0.1 // @description 为智谱清言(ChatGLM.cn)添加右侧悬浮侧边栏。核心功能:1. 双重视图:支持无缝切换"宝石连线"与"问题列表"模式;2. 布局锁死:修复内容溢出问题,按钮永远可见;3. 会话跳转:自动生成问题锚点,平滑滚动定位;4. 智能记忆:自动记录星标节点。 // @author zdm@Gai.cn // @match https://chatglm.cn/* // @icon https://chatglm.cn/img/icons/favicon.svg // @license MIT // @homepageURL https://space.bilibili.com/497930349 // @supportURL https://github.com/sakura11111111111111/ChatGLM-Sidebar-Jump-Axis/issues // @grant none // @downloadURL none // ==/UserScript== (function () { 'use strict'; // === 1. 宝石素材库 (请在此处填入 Base64 字符串) === // 星标态 const GEM_STAR ="data:image/png;base64,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" // 默认态 const GEM_NORMAL ="data:image/png;base64,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" // === 2. 智能记忆系统 === function getChatId(fallbackText) { const match = window.location.href.match(/\/(detail|share)\/([a-zA-Z0-9]+)/); if (match) return match[2]; let fingerprint = document.title; if (fallbackText) fingerprint += "_" + fallbackText.replace(/\s/g, '').slice(0, 15); return "session_" + fingerprint; } function getStarredList(cid) { const raw = localStorage.getItem(`chatglm_stars_${cid}`); return raw ? JSON.parse(raw) : []; } function saveStarredList(cid, list) { localStorage.setItem(`chatglm_stars_${cid}`, JSON.stringify(list)); } function toggleStar(qid, cid) { let list = getStarredList(cid); const idx = list.indexOf(qid); if (idx === -1) list.push(qid); else list.splice(idx, 1); saveStarredList(cid, list); return idx === -1; } // === 3. 样式定义 === // 核心策略:[PART A] 完全复用 V13.2 的原始样式作为基准。 [PART B] 将列表模式作为独立扩展。 const STYLES = ` /* ========================================= */ /* [PART A] 原始 V13.2 宝石模式核心样式 (严格复刻) */ /* ========================================= */ /* 高亮动画 */ @keyframes glm-highlight-pulse { 0% { box-shadow: 0 0 0 transparent; background-color: transparent; border-color: transparent; } 30% { box-shadow: 0 0 25px rgba(64, 158, 255, 0.6); background-color: rgba(64, 158, 255, 0.1); border-color: rgba(64, 158, 255, 0.8); } 100% { box-shadow: 0 0 0 transparent; background-color: transparent; border-color: transparent; } } .glm-flash-target { animation: glm-highlight-pulse 1.8s ease-out forwards; border: 1px solid transparent; border-radius: 8px; } /* === 外层包裹器 (Layout Fix) === */ #glm-nav-wrapper { position: fixed; right: 30px; top: 50%; transform: translateY(-50%); max-height: 80vh; height: auto; display: flex; flex-direction: column; align-items: center; z-index: 99998; transition: transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1), right 0.4s ease, width 0.3s ease, background 0.3s, padding 0.3s; /* 默认状态 */ width: 50px; padding: 0; border-radius: 0; background: transparent; border: none; } /* 折叠状态 */ #glm-nav-wrapper.collapsed { transform: translateY(-50%) translateX(80px); right: 20px; pointer-events: none; } /* === 主内容区 === */ #glm-nav-main-content { display: flex; flex-direction: column; align-items: center; width: 100%; flex: 1; min-height: 0; transition: opacity 0.3s; } #glm-nav-wrapper.collapsed #glm-nav-main-content { opacity: 0; pointer-events: none; } /* === 中间滚动区域 === */ #glm-scroll-area { flex: 1; min-height: 0; width: 100%; overflow-y: auto; overflow-x: visible; padding: 5px 15px; scrollbar-width: none; -ms-overflow-style: none; display: flex; flex-direction: column; position: relative; } #glm-scroll-area::-webkit-scrollbar { display: none; } /* === 宝石节点 (V13.2 原版定义) === */ .glm-nav-dot { width: 24px; height: 24px; background-size: contain; background-repeat: no-repeat; background-position: center; background-color: transparent; box-shadow: none; border: 1px solid rgba(255,255,255,0.1); border-radius: 50%; opacity: 0.6; filter: grayscale(40%); transform: scale(0.85); cursor: pointer; transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1); position: relative; flex-shrink: 0; margin: 18px auto; overflow: visible; z-index: 2; } /* === 连线 (V13.2 原版定义) === */ .glm-nav-dot::after { content: ''; position: absolute; left: 50%; transform: translateX(-50%); top: 100%; height: 38px; width: 1.5px; background: rgba(255, 255, 255, 0.15); pointer-events: none; z-index: -1; transition: all 0.4s; } .glm-nav-dot:last-child::after { display: none; } /* === 悬浮/激活/星标 特效 (V13.2 原版定义 - 绝对保留) === */ .glm-nav-dot:hover { opacity: 1; filter: grayscale(0%); transform: scale(1.1); border-color: rgba(255,255,255,0.3); } .glm-nav-dot.active { opacity: 1; filter: grayscale(0%) drop-shadow(0 0 8px rgba(64, 158, 255, 0.6)); transform: scale(1.3); z-index: 10; border: none; } .glm-nav-dot.is-starred { opacity: 1 !important; filter: grayscale(0%) brightness(1.1) !important; transform: scale(1.1); border: none; } .glm-nav-dot.is-starred.active { transform: scale(1.4); filter: drop-shadow(0 0 10px rgba(255, 60, 60, 0.8)) !important; } /* === 按钮通用 === */ .glm-elevator-btn { width: 28px; height: 28px; flex-shrink: 0; background: rgba(30, 30, 35, 0.85); backdrop-filter: blur(5px); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 8px; color: rgba(255, 255, 255, 0.7); display: flex; align-items: center; justify-content: center; cursor: pointer; font-size: 12px; transition: all 0.2s; user-select: none; margin: 2px 0; z-index: 99999; } .glm-elevator-btn:hover { background: rgba(64, 158, 255, 0.2); border-color: rgba(64, 158, 255, 0.6); color: #fff; transform: scale(1.1); } #glm-toggle-btn { position: absolute; bottom: -45px; width: 24px; height: 24px; background: rgba(20, 20, 20, 0.6); backdrop-filter: blur(4px); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 50%; color: rgba(255, 255, 255, 0.6); display: flex; align-items: center; justify-content: center; cursor: pointer; font-size: 12px; transition: all 0.3s; z-index: 100000; pointer-events: auto; } #glm-toggle-btn:hover { background: rgba(64, 158, 255, 0.8); color: #fff; transform: scale(1.2); } #glm-nav-wrapper.collapsed #glm-toggle-btn { transform: translateX(-70px) translateY(-50%); bottom: 50%; width: 30px; height: 60px; border-radius: 15px 0 0 15px; background: rgba(64, 158, 255, 0.3); box-shadow: -2px 0 10px rgba(0,0,0,0.2); } #glm-nav-wrapper.collapsed #glm-toggle-btn:hover { background: rgba(64, 158, 255, 0.9); width: 35px; } /* 提示框 */ #glm-global-tooltip { position: fixed; background: rgba(15, 15, 20, 0.95); backdrop-filter: blur(10px); color: rgba(255, 255, 255, 0.95); padding: 10px 16px; font-size: 13px; font-weight: 500; border-radius: 8px; border: 1px solid rgba(255,255,255,0.1); box-shadow: 0 10px 30px rgba(0,0,0,0.6); z-index: 99999; pointer-events: none; opacity: 0; visibility: hidden; transition: opacity 0.2s, transform 0.2s; transform: translateY(-50%) translateX(15px); font-family: -apple-system, BlinkMacSystemFont, sans-serif; max-width: 400px; white-space: normal; line-height: 1.5; } #glm-global-tooltip.visible { opacity: 1; visibility: visible; transform: translateY(-50%) translateX(0); } #glm-global-tooltip::before { content: ''; position: absolute; left: -5px; top: 50%; transform: translateY(-50%) rotate(45deg); width: 10px; height: 10px; background: inherit; border-left: 1px solid rgba(255,255,255,0.1); border-bottom: 1px solid rgba(255,255,255,0.1); z-index: -1; } /* ========================================= */ /* [PART B] 扩展:列表模式 (List Mode) */ /* 只有当 #glm-nav-wrapper 拥有 .list-mode 类时才生效 */ /* ========================================= */ /* 视图切换按钮 */ #glm-btn-view { font-size: 14px; margin-bottom: 6px; } /* 列表模式容器 */ #glm-nav-wrapper.list-mode { width: 260px; padding: 15px 10px; align-items: stretch; background: rgba(18, 18, 24, 0.92); backdrop-filter: blur(12px); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.08); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5); } /* 列表模式滚动区 */ #glm-nav-wrapper.list-mode #glm-scroll-area { overflow-x: hidden; padding: 5px 0; } /* 列表模式下的节点重置 (抹除宝石外观) */ #glm-nav-wrapper.list-mode .glm-nav-dot { background-image: none !important; width: auto; height: auto; border-radius: 6px; margin: 4px 5px; padding: 8px 10px 8px 20px; border: none; transform: none !important; opacity: 0.7; filter: none; background-color: transparent; display: flex; align-items: center; } /* 列表模式悬浮 */ #glm-nav-wrapper.list-mode .glm-nav-dot:hover { opacity: 1; background-color: rgba(255, 255, 255, 0.08); } /* 列表模式激活 (矩形背景仅在此处生效) */ #glm-nav-wrapper.list-mode .glm-nav-dot.active { opacity: 1; background-color: rgba(64, 158, 255, 0.15); color: #fff; } /* 列表模式隐藏连线 */ #glm-nav-wrapper.list-mode .glm-nav-dot::after { display: none; } /* 列表模式文字 */ .glm-nav-label { display: none; } /* 默认隐藏 */ #glm-nav-wrapper.list-mode .glm-nav-label { display: block; color: rgba(255, 255, 255, 0.85); font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; width: 100%; text-align: left; } #glm-nav-wrapper.list-mode .glm-nav-dot.active .glm-nav-label { color: #fff; font-weight: 500; } #glm-nav-wrapper.list-mode .glm-nav-dot.is-starred .glm-nav-label { color: #FFD700; } /* 列表模式小圆点 */ #glm-nav-wrapper.list-mode .glm-nav-dot::before { content: ''; position: absolute; left: 8px; top: 50%; transform: translateY(-50%); width: 4px; height: 4px; border-radius: 50%; background-color: rgba(255, 255, 255, 0.4); } #glm-nav-wrapper.list-mode .glm-nav-dot.active::before { background-color: #409EFF; width: 6px; height: 6px; left: 7px; } #glm-nav-wrapper.list-mode .glm-nav-dot.is-starred::before { background-color: #FFD700; } `; const styleSheet = document.createElement("style"); styleSheet.innerText = STYLES; document.head.appendChild(styleSheet); // === 4. DOM 结构 === const wrapper = document.createElement('div'); wrapper.id = 'glm-nav-wrapper'; document.body.appendChild(wrapper); const mainContent = document.createElement('div'); mainContent.id = 'glm-nav-main-content'; wrapper.appendChild(mainContent); // 0. 视图切换按钮 const btnView = document.createElement('div'); btnView.id = 'glm-btn-view'; btnView.className = 'glm-elevator-btn'; btnView.innerHTML = '≡'; btnView.title = "切换列表视图"; btnView.style.display = 'none'; mainContent.appendChild(btnView); // 1. 顶部按钮 const btnTop = document.createElement('div'); btnTop.className = 'glm-elevator-btn'; btnTop.innerHTML = '▲'; btnTop.title = "回到顶部"; btnTop.style.display = 'none'; mainContent.appendChild(btnTop); // 2. 滚动区域 const scrollArea = document.createElement('div'); scrollArea.id = 'glm-scroll-area'; mainContent.appendChild(scrollArea); // 3. 底部按钮 const btnBottom = document.createElement('div'); btnBottom.className = 'glm-elevator-btn'; btnBottom.innerHTML = '▼'; btnBottom.title = "直达最新"; btnBottom.style.display = 'none'; mainContent.appendChild(btnBottom); // 4. 折叠按钮 const toggleBtn = document.createElement('div'); toggleBtn.id = 'glm-toggle-btn'; toggleBtn.innerHTML = '»'; toggleBtn.title = "折叠/展开"; wrapper.appendChild(toggleBtn); const tooltip = document.createElement('div'); tooltip.id = 'glm-global-tooltip'; document.body.appendChild(tooltip); let lastRenderedSignature = ""; let isClickScrolling = false; let currentQuestions = []; // === 5. 状态管理 === let isCollapsed = false; let isListMode = false; // 视图切换逻辑 function toggleListMode() { isListMode = !isListMode; if (isListMode) { wrapper.classList.add('list-mode'); btnView.innerHTML = '×'; btnView.title = "关闭列表"; setTimeout(() => { const activeDot = scrollArea.querySelector('.glm-nav-dot.active'); if (activeDot) activeDot.scrollIntoView({ block: 'center', behavior: 'auto' }); }, 50); } else { wrapper.classList.remove('list-mode'); btnView.innerHTML = '≡'; btnView.title = "切换列表视图"; setTimeout(() => { const activeDot = scrollArea.querySelector('.glm-nav-dot.active'); if (activeDot) activeDot.scrollIntoView({ block: 'center', behavior: 'auto' }); }, 50); } } btnView.onclick = (e) => { e.stopPropagation(); toggleListMode(); }; // 折叠逻辑 function toggleSidebar(forceState = null) { if (forceState !== null) isCollapsed = forceState; else isCollapsed = !isCollapsed; if (isCollapsed) { wrapper.classList.add('collapsed'); toggleBtn.innerHTML = '💎'; tooltip.classList.remove('visible'); } else { wrapper.classList.remove('collapsed'); toggleBtn.innerHTML = '»'; } } toggleBtn.onclick = (e) => { e.stopPropagation(); toggleSidebar(); }; function checkResponsive() { if (window.innerWidth < 1400) toggleSidebar(true); } checkResponsive(); window.addEventListener('resize', () => setTimeout(checkResponsive, 200)); // === 6. 渲染逻辑 === const observerOptions = { root: null, rootMargin: '-45% 0px -45% 0px', threshold: 0 }; const scrollObserver = new IntersectionObserver((entries) => { if (isClickScrolling) return; entries.forEach(entry => { if (entry.isIntersecting) activateDot(entry.target.id); }); }, observerOptions); function activateDot(targetId) { const allDots = scrollArea.querySelectorAll('.glm-nav-dot'); let activeDot = null; allDots.forEach(dot => { if (dot.dataset.targetId === targetId) { dot.classList.add('active'); activeDot = dot; } else { dot.classList.remove('active'); } }); if (activeDot) { const containerHeight = scrollArea.clientHeight; const dotTop = activeDot.offsetTop; const dotHeight = activeDot.clientHeight; scrollArea.scrollTo({ top: dotTop - (containerHeight / 2) + (dotHeight / 2), behavior: 'smooth' }); } } btnTop.onclick = () => { if (currentQuestions.length > 0) { isClickScrolling = true; const target = currentQuestions[0]; target.scrollIntoView({ behavior: 'smooth', block: 'start' }); activateDot(target.id); setTimeout(() => isClickScrolling = false, 1000); } }; btnBottom.onclick = () => { if (currentQuestions.length > 0) { isClickScrolling = true; const target = currentQuestions[currentQuestions.length - 1]; target.scrollIntoView({ behavior: 'smooth', block: 'start' }); activateDot(target.id); setTimeout(() => isClickScrolling = false, 1000); } }; function generateNavNodes() { const allQuestions = document.querySelectorAll('[id^="row-question-"]'); const validQuestions = Array.from(allQuestions).filter(q => /^row-question-\d+$/.test(q.id) && q.offsetHeight > 0); currentQuestions = validQuestions; const hasContent = validQuestions.length > 0; const showElevator = validQuestions.length > 3; wrapper.style.display = hasContent ? 'flex' : 'none'; btnView.style.display = hasContent ? 'flex' : 'none'; btnTop.style.display = showElevator ? 'flex' : 'none'; btnBottom.style.display = showElevator ? 'flex' : 'none'; if (!hasContent) return; const firstQuestionText = validQuestions[0].innerText; const currentChatId = getChatId(firstQuestionText); const currentSignature = currentChatId + "|" + validQuestions.map(q => q.id).join('|'); if (currentSignature === lastRenderedSignature) return; lastRenderedSignature = currentSignature; scrollArea.innerHTML = ''; scrollObserver.disconnect(); const starredList = getStarredList(currentChatId); validQuestions.forEach((q, index) => { scrollObserver.observe(q); const dot = document.createElement('div'); dot.className = 'glm-nav-dot'; dot.dataset.targetId = q.id; const isStarred = starredList.includes(q.id); if (isStarred && GEM_STAR) dot.style.backgroundImage = `url(${GEM_STAR})`; else if (!isStarred && GEM_NORMAL) dot.style.backgroundImage = `url(${GEM_NORMAL})`; if (isStarred) dot.classList.add('is-starred'); let textRaw = (q.querySelector('.question-txt') || q).innerText; const cleanText = textRaw.replace(/\s+/g, ' ').trim(); const tooltipText = `Q${index + 1}: ${cleanText.slice(0, 80)}${cleanText.length > 80 ? '...' : ''}`; const labelText = cleanText.slice(0, 60); dot.dataset.rawText = tooltipText; // 内部文本标签 (列表模式专用) const labelSpan = document.createElement('span'); labelSpan.className = 'glm-nav-label'; labelSpan.innerText = labelText; dot.appendChild(labelSpan); dot.onmouseenter = () => { if (isCollapsed) return; if (isListMode) return; // 列表模式不需要 Tooltip const rect = dot.getBoundingClientRect(); tooltip.innerText = (dot.classList.contains('is-starred') ? "⭐ " : "") + dot.dataset.rawText; tooltip.style.right = (window.innerWidth - rect.left + 25) + 'px'; tooltip.style.top = (rect.top + rect.height / 2) + 'px'; tooltip.classList.add('visible'); }; dot.onmouseleave = () => tooltip.classList.remove('visible'); dot.onclick = (e) => { e.stopPropagation(); isClickScrolling = true; activateDot(q.id); q.scrollIntoView({ behavior: 'smooth', block: 'center' }); q.classList.remove('glm-flash-target'); void q.offsetWidth; q.classList.add('glm-flash-target'); setTimeout(() => { isClickScrolling = false; }, 1000); }; dot.ondblclick = (e) => { e.stopPropagation(); const nowStarred = toggleStar(q.id, currentChatId); if (nowStarred && GEM_STAR) dot.style.backgroundImage = `url(${GEM_STAR})`; else if (!nowStarred && GEM_NORMAL) dot.style.backgroundImage = `url(${GEM_NORMAL})`; nowStarred ? dot.classList.add('is-starred') : dot.classList.remove('is-starred'); if (!isListMode) { tooltip.innerText = (nowStarred ? "⭐ " : "") + dot.dataset.rawText; dot.style.transform = "scale(1.6)"; setTimeout(() => dot.style.transform = "", 200); } }; scrollArea.appendChild(dot); }); } let timeout = null; const observer = new MutationObserver(() => { if (timeout) clearTimeout(timeout); timeout = setTimeout(generateNavNodes, 500); }); observer.observe(document.body, { childList: true, subtree: true }); setTimeout(generateNavNodes, 1000); })();