优化 编辑的体验
This commit is contained in:
		
							parent
							
								
									1c169d4d35
								
							
						
					
					
						commit
						764add8de7
					
				| @ -1,4 +1,5 @@ | ||||
| import React from "react" | ||||
| import { initMermaid } from '@/lib/markdown/mermaid-init' | ||||
| 
 | ||||
| declare global { | ||||
|   interface Window { | ||||
| @ -40,47 +41,9 @@ export const MERMAID_CONFIG = { | ||||
|  * 初始化 Mermaid | ||||
|  */ | ||||
| export async function initializeMermaid() { | ||||
|   // 等待 Mermaid 加载完成
 | ||||
|   if (typeof window !== 'undefined') { | ||||
|     try { | ||||
|       // 如果 mermaid 还没加载,等待它加载完成(最多等待 5 秒)
 | ||||
|       if (!window.mermaid) { | ||||
|         await new Promise<void>((resolve, reject) => { | ||||
|           const startTime = Date.now() | ||||
|           const checkMermaid = () => { | ||||
|             // 如果等待超过 5 秒,就放弃等待
 | ||||
|             if (Date.now() - startTime > 5000) { | ||||
|               reject(new Error('Mermaid initialization timeout')) | ||||
|               return | ||||
|             } | ||||
| 
 | ||||
|             if (window.mermaid) { | ||||
|               resolve() | ||||
|             } else { | ||||
|               setTimeout(checkMermaid, 100) | ||||
|             } | ||||
|           } | ||||
|           checkMermaid() | ||||
|         }) | ||||
|       } | ||||
| 
 | ||||
|       // 配置 Mermaid
 | ||||
|       window.mermaid.initialize({ | ||||
|         ...MERMAID_CONFIG, | ||||
|         startOnLoad: true, | ||||
|       }) | ||||
| 
 | ||||
|       // 初始化所有图表
 | ||||
|       const mermaidElements = document.querySelectorAll('.mermaid') | ||||
|       if (mermaidElements.length > 0) { | ||||
|         // 设置超时
 | ||||
|         const initPromise = window.mermaid.init(undefined, mermaidElements) | ||||
|         const timeoutPromise = new Promise((_, reject) => { | ||||
|           setTimeout(() => reject(new Error('Chart initialization timeout')), 5000) | ||||
|         }) | ||||
| 
 | ||||
|         await Promise.race([initPromise, timeoutPromise]) | ||||
|       } | ||||
|       await initMermaid() | ||||
|     } catch (error) { | ||||
|       console.error('Mermaid initialization error:', error) | ||||
|       // 即使初始化失败也继续执行,不阻塞整个应用
 | ||||
| @ -172,13 +135,7 @@ async function handlePreviewCopy(previewContent: string): Promise<boolean> { | ||||
|   const mermaidElements = tempDiv.querySelectorAll('.mermaid') | ||||
|   if (mermaidElements.length > 0) { | ||||
|     try { | ||||
|       // 确保 mermaid 已经初始化
 | ||||
|       if (typeof window.mermaid !== 'undefined') { | ||||
|         // 使用相同的配置
 | ||||
|         window.mermaid.initialize(MERMAID_CONFIG) | ||||
|         // 重新渲染所有图表
 | ||||
|         await window.mermaid.init(undefined, mermaidElements) | ||||
|       } | ||||
|       await initMermaid() | ||||
|     } catch (error) { | ||||
|       console.error('Mermaid rendering error:', error) | ||||
|     } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 tianyaxiang
						tianyaxiang