From fde98a50323ddca36040b0e963592a97dd9911ab Mon Sep 17 00:00:00 2001 From: lsy Date: Tue, 10 Dec 2024 19:35:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF=EF=BC=9A=E4=BF=AE=E5=A4=8Dma?= =?UTF-8?q?rkdown=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/themes/echoes/post.tsx | 251 +++++++++++----------- frontend/themes/echoes/styles/layouts.css | 81 +++++++ 2 files changed, 212 insertions(+), 120 deletions(-) diff --git a/frontend/themes/echoes/post.tsx b/frontend/themes/echoes/post.tsx index b055953..dcb038a 100644 --- a/frontend/themes/echoes/post.tsx +++ b/frontend/themes/echoes/post.tsx @@ -29,10 +29,6 @@ const mockPost: PostDisplay = { id: 1, title: "Markdown 完全指南:从基础到高级排版", content: ` -# Markdown 完全指南:从基础到高级排版 - -这篇指南介绍 Markdown 的基础语法和高级排版技巧。 - ## 1. 基础语法 ### 1.1 粗体文本 @@ -195,11 +191,79 @@ function greet(user: User): string { :smile: :heart: :star: :rocket: -## 2. 高级排版 +### 1.14 可折叠内容 + +\`\`\`markdown +
+ + 🎯 如何选择合适的写作工具? + + +选择写作工具时需要考虑以下几点: + +1. **跨平台支持** - 确保在不同设备上都能访问 +2. **实时预览** - Markdown 实时渲染很重要 +3. **版本控制** - 最好能支持文章的版本管理 +4. **导出功能** - 支持导出为多种格式 +
+\`\`\` + +
+ + 🎯 如何选择合适的写作工具? + + +选择写作工具时需要考虑以下几点: + +1. **跨平台支持** - 确保在不同设备上都能访问 +2. **实时预览** - Markdown 实时渲染很重要 +3. **版本控制** - 最好能支持文章的版本管理 +4. **导出功能** - 支持导出为多种格式 +
+ +### 1.15 引用式 + +\`\`\`markdown +> 📌 **最佳实践** +> +> 好的文章需要有清晰的结构和流畅的表达。以下是一些建议: +> +> 1. 开门见山,直入主题 +> 2. 层次分明,逻辑清晰 +> 3. 语言简洁,表达准确 +> +> *— 写作指南* +\`\`\` + +> 📌 **最佳实践** +> +> 好的文章需要有清晰的结构和流畅的表达。以下是一些建议: +> +> 1. 开门见山,直入主题 +> 2. 层次分明,逻辑清晰 +> 3. 语言简洁,表达准确 +> +> *— 写作指南* + + +### 1.16 脚注 + +\`\`\`markdown +这里有一个脚注[^1]。 +[^2]: 这是脚注的内容。 +\`\`\` + +这里有一个脚注[^1]。 + +[^1]:这是脚注的内容。 + + + +## 2. HTML排版 ### 2.1 图文混排布局 -
+\`\`\`markdown
 
写作工具使用合适的写作工具可以极大提升写作效率。推荐使用支持即时预览的编辑器,这样可以实时查看排版效果。

-
+\`\`\`
-### 2.2 可折叠内容 -
-
- - 🎯 如何选择合适的写作工具? - -选择写作工具时需要考虑以下几点: +### 2.2 并排卡片 -1. **跨平台支持** - 确保在不同设备上都能访问 -2. **实时预览** - Markdown 实时渲染很重要 -3. **版本控制** - 最好能支持文章的版本管理 -4. **导出功能** - 支持导出为多种格式 -
-
- -
- - 🎯 如何选择合适的写作工具? - - -选择写作工具时需要考虑以下几点: - -1. **跨平台支持** - 确保在不同设备上都能访问 -2. **实时预览** - Markdown 实时渲染很重要 -3. **版本控制** - 最好能支持文章的版本管理 -4. **导出功能** - 支持导出为多种格式 -
- -### 2.3 并排卡片 - -
+\`\`\`markdown
 

🚀 快速上手

@@ -264,7 +300,7 @@ function greet(user: User): string {

专注于内容创作,让工具自动处理排版,提高写作效率。

-
+\`\`\`
@@ -279,12 +315,12 @@ function greet(user: User): string { ### 2.4 高亮提示框 -
+\`\`\`markdown
 

💡 小贴士

在写作时,可以先列出文章大纲,再逐步充实内容。这可以保证文章结构清晰,内容完整。

-
+\`\`\`

小贴士

@@ -293,7 +329,7 @@ function greet(user: User): string { ### 2.5 时间线 -
+\`\`\`markdown
 
@@ -307,7 +343,7 @@ function greet(user: User): string {

广泛搜集相关资料,为写作做充实准备。

-
+\`\`\`
@@ -323,53 +359,9 @@ function greet(user: User): string {
-### 2.6 引用式 -
-> 📌 **最佳实践**
-> 
-> 好的文章需要有清晰的结构和流畅的表达。以下是一些建议:
-> 
-> 1. 开门见山,直入主题
-> 2. 层次分明,逻辑清晰
-> 3. 语言简洁,表达准确
-> 
-> *— 写作指南*
-
-> 📌 **最佳实践** -> -> 好的文章需要有清晰的结构和流畅的表达。以下是一些建议: -> -> 1. 开门见山,直入主题 -> 2. 层次分明,逻辑清晰 -> 3. 语言简洁,表达准确 -> -> *— 写作指南* - -## 3. 特殊语法 - -### 3.1 脚注 - -
-这里有一个脚注[^1]。
-
-[^1]: 这是脚注的内容。
-
- -这里有一个脚注[^1]。 - -[^1]: 这是脚注的内容。 - -### 3.2 表情符号 - -
-:smile: :heart: :star: :rocket:
-
- -:smile: :heart: :star: :rocket: - -## 4. 总结 +## 3. 总结 本文展示了 Markdown 从基础到高级的各种用法: @@ -700,7 +692,8 @@ export default new Template({}, ({ http, args }) => { }) => { const match = /language-(\w+)/.exec(className || ''); const code = String(children).replace(/\n$/, ''); - + + // 如果是内联代码 if (!className || inline) { return ( { ); } - + const language = match ? match[1] : ''; + // 特殊处理表格语法 + const isTable = code.includes('|') && code.includes('\n') && code.includes('---'); + return (
- - {code} - + {isTable ? ( + // 对表格使用 pre 标签保持格式 +
+                      {code}
+                    
+ ) : ( + // 其他代码使用 SyntaxHighlighter + + {code} + + )}
@@ -837,7 +847,8 @@ export default new Template({}, ({ http, args }) => { ), diff --git a/frontend/themes/echoes/styles/layouts.css b/frontend/themes/echoes/styles/layouts.css index 0ffbe1a..924d9b3 100644 --- a/frontend/themes/echoes/styles/layouts.css +++ b/frontend/themes/echoes/styles/layouts.css @@ -316,3 +316,84 @@ html[class~="dark"] .scroll-container::-webkit-scrollbar-thumb:hover { .scroll-hidden::-webkit-scrollbar { display: none; /* Chrome, Safari and Opera */ } + +/* 可折叠块样式 */ +details { + transition: all 0.2s ease; + background-color: transparent; + border: 1px solid var(--gray-6); + border-radius: 8px; + overflow: hidden; +} + +/* 亮色模式样式 */ +details summary { + padding: 1rem; + background-color: var(--gray-2); + font-weight: 500; + color: var(--gray-12); + border-bottom: 1px solid transparent; /* 添加透明边框 */ + transition: all 0.2s ease; /* 添加过渡效果 */ +} + +details summary:hover { + background-color: var(--gray-4); +} + +details[open] { + background-color: var(--gray-2); +} + + +/* 暗色模式样式覆盖 */ +html[class~="dark"] details { + background-color: var(--gray-3); + background-color: transparent; +} + +html[class~="dark"] details summary { + background-color: var(--gray-3); + color: var(--gray-12); +} + +html[class~="dark"] details summary:hover { + background-color: var(--gray-5); +} + +html[class~="dark"] details[open] { + background-color: var(--gray-3); +} + +/* 内容区域样式 */ +details > *:not(summary) { + padding: 1rem; + color: var(--gray-11); +} + +/* 移除默认的三角形标记 */ +details summary::-webkit-details-marker, +details summary::marker { + display: none; +} + +/* 自定义展开/折叠指示器 */ +details summary { + position: relative; + padding-right: 2.5rem; + cursor: pointer; + user-select: none; +} + +details summary::after { + position: absolute; + right: 1rem; + top: 50%; + transform: translateY(-50%); + transition: transform 0.2s ease; + color: var(--gray-11); +} + +/* 暗色模式下的指示器颜色 */ +html[class~="dark"] details summary::after { + color: var(--gray-10); +}