From 5938930cdb2e8f86847faf0e29776c274e057414 Mon Sep 17 00:00:00 2001 From: tianyaxiang Date: Sun, 2 Feb 2025 10:33:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=9D=97=E4=B8=BB=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/editor/WechatEditor.tsx | 14 ++++++++++---- src/components/editor/components/EditorPreview.tsx | 9 +++++---- src/lib/markdown.ts | 2 +- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/components/editor/WechatEditor.tsx b/src/components/editor/WechatEditor.tsx index b16de31..7833d29 100644 --- a/src/components/editor/WechatEditor.tsx +++ b/src/components/editor/WechatEditor.tsx @@ -5,7 +5,7 @@ import { templates } from '@/config/wechat-templates' import { cn } from '@/lib/utils' import { useToast } from '@/components/ui/use-toast' import { ToastAction } from '@/components/ui/toast' -import { convertToWechat } from '@/lib/markdown' +import { convertToWechat, getCodeThemeStyles } from '@/lib/markdown' import { type RendererOptions } from '@/lib/types' import { useEditorSync } from './hooks/useEditorSync' import { useAutoSave } from './hooks/useAutoSave' @@ -18,6 +18,7 @@ import { WechatStylePicker } from '@/components/template/WechatStylePicker' import { Copy, Clock, Type, Trash2 } from 'lucide-react' import { useLocalStorage } from '@/hooks/use-local-storage' import { codeThemes, type CodeThemeId } from '@/config/code-themes' +import '@/styles/code-themes.css' // 计算阅读时间(假设每分钟阅读300字) const calculateReadingTime = (text: string): string => { @@ -103,7 +104,11 @@ export default function WechatEditor() { block: { ...(template?.options?.block || {}), ...(styleOptions.block || {}), - // 合并标题样式,保留模版中的其他样式属性 + code_pre: { + ...(template?.options?.block?.code_pre || {}), + ...(styleOptions.block?.code_pre || {}), + ...getCodeThemeStyles(codeTheme) + }, h1: { ...(template?.options?.block?.h1 || {}), ...(styleOptions.block?.h1 || {}), @@ -279,8 +284,7 @@ export default function WechatEditor() { } } - const timeoutId = setTimeout(updatePreview, 100) - return () => clearTimeout(timeoutId) + updatePreview() }, [value, selectedTemplate, styleOptions, codeTheme, getPreviewContent, toast]) // 加载已保存的内容 @@ -562,6 +566,7 @@ export default function WechatEditor() { previewSize={previewSize} isConverting={isConverting} previewContent={previewContent} + codeTheme={codeTheme} onPreviewSizeChange={setPreviewSize} /> @@ -603,6 +608,7 @@ export default function WechatEditor() { previewSize={previewSize} isConverting={isConverting} previewContent={previewContent} + codeTheme={codeTheme} onPreviewSizeChange={setPreviewSize} /> )} diff --git a/src/components/editor/components/EditorPreview.tsx b/src/components/editor/components/EditorPreview.tsx index 8dd8617..8f34163 100644 --- a/src/components/editor/components/EditorPreview.tsx +++ b/src/components/editor/components/EditorPreview.tsx @@ -3,16 +3,16 @@ import { PREVIEW_SIZES, type PreviewSize } from '../constants' import { Loader2, ZoomIn, ZoomOut, Maximize2, Minimize2 } from 'lucide-react' import { templates } from '@/config/wechat-templates' import { useState, useRef, useEffect } from 'react' -import { useLocalStorage } from '@/hooks/use-local-storage' -import { codeThemes, type CodeThemeId } from '@/config/code-themes' +import { type CodeThemeId } from '@/config/code-themes' import '@/styles/code-themes.css' interface EditorPreviewProps { previewRef: React.RefObject - selectedTemplate: string + selectedTemplate?: string previewSize: PreviewSize isConverting: boolean previewContent: string + codeTheme: CodeThemeId onPreviewSizeChange: (size: PreviewSize) => void } @@ -22,12 +22,12 @@ export function EditorPreview({ previewSize, isConverting, previewContent, + codeTheme, onPreviewSizeChange }: EditorPreviewProps) { const [zoom, setZoom] = useState(100) const [isFullscreen, setIsFullscreen] = useState(false) const isScrolling = useRef(false) - const [codeTheme] = useLocalStorage('code-theme', codeThemes[0].id) const handleZoomIn = () => { setZoom(prev => Math.min(prev + 10, 200)) @@ -57,6 +57,7 @@ export function EditorPreview({ selectedTemplate && templates.find(t => t.id === selectedTemplate)?.styles, `code-theme-${codeTheme}` )} + key={codeTheme} >
预览效果
diff --git a/src/lib/markdown.ts b/src/lib/markdown.ts index 0fff299..bf66b6e 100644 --- a/src/lib/markdown.ts +++ b/src/lib/markdown.ts @@ -128,7 +128,7 @@ const defaultOptions: RendererOptions = { } // 获取代码主题的样式 -function getCodeThemeStyles(theme: CodeThemeId): StyleOptions { +export function getCodeThemeStyles(theme: CodeThemeId): StyleOptions { const themeConfig = codeThemes.find(t => t.id === theme) if (!themeConfig) return {}