@jet-w/astro-blog 0.1.6 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist/chunk-6D3XRDNY.js +145 -0
  2. package/dist/chunk-A2E2VSAQ.js +246 -0
  3. package/dist/{chunk-GYLSY3OJ.js → chunk-TJTPX2WP.js} +1 -1
  4. package/dist/config/index.d.ts +3 -47
  5. package/dist/config/index.js +18 -2
  6. package/dist/i18n-PgMCFBw0.d.ts +222 -0
  7. package/dist/index.d.ts +204 -7
  8. package/dist/index.js +255 -3
  9. package/dist/integration.d.ts +9 -1
  10. package/dist/integration.js +2 -1
  11. package/dist/{sidebar-DNdiCKBw.d.ts → sidebar-Da-W_4Lr.d.ts} +1 -1
  12. package/dist/utils/sidebar.d.ts +1 -1
  13. package/package.json +1 -1
  14. package/src/components/blog/FloatingToc.vue +11 -3
  15. package/src/components/blog/Hero.astro +17 -2
  16. package/src/components/blog/NavigationTabs.vue +46 -15
  17. package/src/components/blog/PostCard.astro +28 -10
  18. package/src/components/blog/RelatedPosts.astro +23 -7
  19. package/src/components/blog/TableOfContents.astro +10 -4
  20. package/src/components/blog/TagCloud.astro +4 -3
  21. package/src/components/home/FeaturedPostsSection.astro +22 -6
  22. package/src/components/home/QuickNavSection.astro +33 -4
  23. package/src/components/home/RecentPostsSection.astro +22 -6
  24. package/src/components/home/StatsSection.astro +24 -6
  25. package/src/components/layout/Footer.astro +36 -20
  26. package/src/components/layout/Header.astro +75 -17
  27. package/src/components/layout/Sidebar.astro +40 -25
  28. package/src/components/ui/LanguageSwitcher.vue +183 -0
  29. package/src/components/ui/SearchBox.vue +13 -5
  30. package/src/components/ui/SearchInterface.vue +49 -25
  31. package/src/layouts/BaseLayout.astro +77 -52
  32. package/src/layouts/PageLayout.astro +22 -27
  33. package/src/layouts/SlidesLayout.astro +14 -2
  34. package/src/pages/archives/[year]/[month].astro +36 -17
  35. package/src/pages/archives/index.astro +36 -20
  36. package/src/pages/categories/[category].astro +33 -16
  37. package/src/pages/categories/index.astro +37 -14
  38. package/src/pages/posts/[...slug].astro +125 -18
  39. package/src/pages/posts/index.astro +59 -37
  40. package/src/pages/posts/page/[page].astro +65 -27
  41. package/src/pages/rss.xml.ts +18 -6
  42. package/src/pages/search.astro +50 -14
  43. package/src/pages/slides/index.astro +25 -6
  44. package/src/pages/tags/[tag].astro +32 -15
  45. package/src/pages/tags/index.astro +39 -16
  46. package/src/plugins/remark-containers.mjs +351 -322
  47. package/src/plugins/remark-protect-code.mjs +69 -0
  48. package/src/styles/global.css +35 -1
  49. package/templates/default/.claude/ralph-loop.local.md +48 -0
  50. package/templates/default/astro.config.mjs +33 -4
  51. package/templates/default/content/posts/blog_docs_en/01.get-started/01-intro.md +81 -0
  52. package/templates/default/content/posts/blog_docs_en/01.get-started/02-install.md +137 -0
  53. package/templates/default/content/posts/blog_docs_en/01.get-started/03-create-post.md +176 -0
  54. package/templates/default/content/posts/blog_docs_en/01.get-started/04-structure.md +173 -0
  55. package/templates/default/content/posts/blog_docs_en/01.get-started/05-deploy.md +208 -0
  56. package/templates/default/content/posts/blog_docs_en/01.get-started/README.md +52 -0
  57. package/templates/default/content/posts/blog_docs_en/02.guide/02-containers.md +245 -0
  58. package/templates/default/content/posts/blog_docs_en/02.guide/03-code-blocks.md +207 -0
  59. package/templates/default/content/posts/blog_docs_en/02.guide/03-mermaid.md +194 -0
  60. package/templates/default/content/posts/blog_docs_en/02.guide/04-icons.md +229 -0
  61. package/templates/default/content/posts/blog_docs_en/02.guide/06-latex.md +233 -0
  62. package/templates/default/content/posts/blog_docs_en/02.guide/07-video.md +184 -0
  63. package/templates/default/content/posts/blog_docs_en/02.guide/08-slides.md +359 -0
  64. package/templates/default/content/posts/blog_docs_en/02.guide/README.md +213 -0
  65. package/templates/default/content/posts/blog_docs_en/03.config/01-site.md +208 -0
  66. package/templates/default/content/posts/blog_docs_en/03.config/02-sidebar.md +240 -0
  67. package/templates/default/content/posts/blog_docs_en/03.config/03-i18n.md +349 -0
  68. package/templates/default/content/posts/blog_docs_en/03.config/README.md +85 -0
  69. package/templates/default/content/posts/blog_docs_en/README.md +79 -0
  70. package/templates/default/content/posts/blog_docs_zh/01.get-started/01-intro.md +81 -0
  71. package/templates/default/content/posts/blog_docs_zh/01.get-started/02-install.md +137 -0
  72. package/templates/default/content/posts/blog_docs_zh/01.get-started/03-create-post.md +176 -0
  73. package/templates/default/content/posts/blog_docs_zh/01.get-started/04-structure.md +173 -0
  74. package/templates/default/content/posts/blog_docs_zh/01.get-started/05-deploy.md +208 -0
  75. package/templates/default/content/posts/blog_docs_zh/01.get-started/README.md +52 -0
  76. package/templates/default/content/posts/blog_docs_zh/02.guide/02-containers.md +245 -0
  77. package/templates/default/content/posts/blog_docs_zh/02.guide/03-code-blocks.md +206 -0
  78. package/templates/default/content/posts/blog_docs_zh/02.guide/03-mermaid.md +194 -0
  79. package/templates/default/content/posts/blog_docs_zh/02.guide/04-icons.md +229 -0
  80. package/templates/default/content/posts/blog_docs_zh/02.guide/06-latex.md +233 -0
  81. package/templates/default/content/posts/blog_docs_zh/02.guide/07-video.md +184 -0
  82. package/templates/default/content/posts/blog_docs_zh/02.guide/08-slides.md +359 -0
  83. package/templates/default/content/posts/blog_docs_zh/02.guide/README.md +213 -0
  84. package/templates/default/content/posts/blog_docs_zh/03.config/01-site.md +208 -0
  85. package/templates/default/content/posts/blog_docs_zh/03.config/02-sidebar.md +240 -0
  86. package/templates/default/content/posts/blog_docs_zh/03.config/03-i18n.md +348 -0
  87. package/templates/default/content/posts/blog_docs_zh/03.config/README.md +85 -0
  88. package/templates/default/content/posts/blog_docs_zh/README.md +78 -0
  89. package/templates/default/package-lock.json +9667 -0
  90. package/templates/default/package.json +1 -1
  91. package/templates/default/src/config/footer.ts +14 -11
  92. package/templates/default/src/config/locales/en/footer.ts +17 -0
  93. package/templates/default/src/config/locales/en/index.ts +20 -0
  94. package/templates/default/src/config/locales/en/menu.ts +14 -0
  95. package/templates/default/src/config/locales/en/sidebar.ts +34 -0
  96. package/templates/default/src/config/locales/en/site.ts +7 -0
  97. package/templates/default/src/config/locales/en/ui.ts +29 -0
  98. package/templates/default/src/config/locales/index.ts +7 -0
  99. package/templates/default/src/config/locales/zh-CN/footer.ts +17 -0
  100. package/templates/default/src/config/locales/zh-CN/index.ts +20 -0
  101. package/templates/default/src/config/locales/zh-CN/menu.ts +14 -0
  102. package/templates/default/src/config/locales/zh-CN/sidebar.ts +34 -0
  103. package/templates/default/src/config/locales/zh-CN/site.ts +7 -0
  104. package/templates/default/src/config/locales/zh-CN/ui.ts +29 -0
  105. package/templates/default/src/config/sidebar.ts +10 -12
  106. package/templates/default/src/config/site.ts +2 -2
  107. package/templates/default/src/content.config.ts +15 -3
  108. package/templates/default/src/env.d.ts +7 -0
  109. package/dist/chunk-MQXPSOYB.js +0 -124
  110. package/templates/default/content/posts/blog_docs/01-quick-start.md +0 -162
  111. package/templates/default/content/posts/blog_docs/02-frontmatter.md +0 -277
  112. package/templates/default/content/posts/blog_docs/03-markdown-basic.md +0 -350
  113. package/templates/default/content/posts/blog_docs/04-containers.md +0 -331
  114. package/templates/default/content/posts/blog_docs/05-code-blocks.md +0 -388
  115. package/templates/default/content/posts/blog_docs/06-mermaid.md +0 -431
  116. package/templates/default/content/posts/blog_docs/07-video.md +0 -243
  117. package/templates/default/content/posts/blog_docs/08-latex.md +0 -382
  118. package/templates/default/content/posts/blog_docs/09-icons.md +0 -326
  119. package/templates/default/content/posts/blog_docs/10-sidebar.md +0 -445
  120. package/templates/default/content/posts/blog_docs/11-config.md +0 -334
  121. package/templates/default/content/posts/blog_docs/12-slides.mdx +0 -552
  122. package/templates/default/content/posts/blog_docs/README.md +0 -151
@@ -1,388 +0,0 @@
1
- ---
2
- title: 代码块与高亮
3
- description: 代码展示的最佳实践和高级用法
4
- pubDate: 2025-12-11
5
- author: Astro Blog
6
- categories:
7
- - 博客教程
8
- tags:
9
- - 代码
10
- - 语法高亮
11
- ---
12
-
13
- # 代码块与高亮
14
-
15
- 本博客使用 Shiki 进行代码语法高亮,支持 100+ 编程语言,并提供代码复制、折叠等增强功能。
16
-
17
- ## 基本用法
18
-
19
- ### 行内代码
20
-
21
- 使用单个反引号包裹:
22
-
23
- ```markdown
24
- 使用 `npm install` 安装依赖。
25
- 变量 `count` 的值为 `10`。
26
- ```
27
-
28
- 效果:使用 `npm install` 安装依赖。
29
-
30
- ### 代码块
31
-
32
- 使用三个反引号包裹,并指定语言:
33
-
34
- ````markdown
35
- ```javascript
36
- function hello(name) {
37
- console.log(`Hello, ${name}!`);
38
- }
39
-
40
- hello('World');
41
- ```
42
- ````
43
-
44
- 效果:
45
-
46
- ```javascript
47
- function hello(name) {
48
- console.log(`Hello, ${name}!`);
49
- }
50
-
51
- hello('World');
52
- ```
53
-
54
- ## 支持的语言
55
-
56
- 博客支持众多编程语言,常用的包括:
57
-
58
- | 语言 | 标识符 | 语言 | 标识符 |
59
- |:---|:---|:---|:---|
60
- | JavaScript | `javascript` 或 `js` | Python | `python` 或 `py` |
61
- | TypeScript | `typescript` 或 `ts` | Java | `java` |
62
- | HTML | `html` | CSS | `css` |
63
- | Vue | `vue` | React JSX | `jsx` |
64
- | Bash | `bash` 或 `shell` | SQL | `sql` |
65
- | JSON | `json` | YAML | `yaml` |
66
- | Markdown | `markdown` 或 `md` | Go | `go` |
67
- | Rust | `rust` | C/C++ | `c` / `cpp` |
68
-
69
- ## 语言示例
70
-
71
- ### JavaScript / TypeScript
72
-
73
- ```javascript
74
- // ES6+ 特性
75
- const greet = (name) => `Hello, ${name}!`;
76
-
77
- async function fetchData(url) {
78
- const response = await fetch(url);
79
- return response.json();
80
- }
81
-
82
- // 解构赋值
83
- const { name, age } = user;
84
- const [first, ...rest] = array;
85
- ```
86
-
87
- ```typescript
88
- interface User {
89
- id: number;
90
- name: string;
91
- email?: string;
92
- }
93
-
94
- function getUser(id: number): Promise<User> {
95
- return fetch(`/api/users/${id}`).then(res => res.json());
96
- }
97
- ```
98
-
99
- ### Vue
100
-
101
- ```vue
102
- <template>
103
- <div class="counter">
104
- <button @click="decrement">-</button>
105
- <span>{{ count }}</span>
106
- <button @click="increment">+</button>
107
- </div>
108
- </template>
109
-
110
- <script setup lang="ts">
111
- import { ref } from 'vue';
112
-
113
- const count = ref(0);
114
- const increment = () => count.value++;
115
- const decrement = () => count.value--;
116
- </script>
117
-
118
- <style scoped>
119
- .counter {
120
- display: flex;
121
- gap: 1rem;
122
- }
123
- </style>
124
- ```
125
-
126
- ### Python
127
-
128
- ```python
129
- from typing import List, Optional
130
-
131
- class DataProcessor:
132
- def __init__(self, data: List[dict]):
133
- self.data = data
134
-
135
- def filter_by(self, key: str, value: any) -> List[dict]:
136
- """根据键值对过滤数据"""
137
- return [item for item in self.data if item.get(key) == value]
138
-
139
- async def fetch_and_process(self, url: str) -> Optional[dict]:
140
- async with aiohttp.ClientSession() as session:
141
- async with session.get(url) as response:
142
- return await response.json()
143
- ```
144
-
145
- ### Bash / Shell
146
-
147
- ```bash
148
- #!/bin/bash
149
-
150
- # 变量定义
151
- PROJECT_NAME="my-project"
152
- BUILD_DIR="./dist"
153
-
154
- # 函数定义
155
- build() {
156
- echo "Building $PROJECT_NAME..."
157
- npm run build
158
-
159
- if [ $? -eq 0 ]; then
160
- echo "Build successful!"
161
- else
162
- echo "Build failed!" >&2
163
- exit 1
164
- fi
165
- }
166
-
167
- # 执行构建
168
- build
169
- ```
170
-
171
- ### SQL
172
-
173
- ```sql
174
- -- 创建用户表
175
- CREATE TABLE users (
176
- id SERIAL PRIMARY KEY,
177
- username VARCHAR(50) NOT NULL UNIQUE,
178
- email VARCHAR(100) NOT NULL,
179
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
180
- );
181
-
182
- -- 查询活跃用户
183
- SELECT
184
- u.username,
185
- COUNT(p.id) AS post_count
186
- FROM users u
187
- LEFT JOIN posts p ON u.id = p.author_id
188
- WHERE u.created_at > '2024-01-01'
189
- GROUP BY u.id
190
- HAVING COUNT(p.id) > 5
191
- ORDER BY post_count DESC;
192
- ```
193
-
194
- ### JSON / YAML
195
-
196
- ```json
197
- {
198
- "name": "my-project",
199
- "version": "1.0.0",
200
- "dependencies": {
201
- "vue": "^3.4.0",
202
- "axios": "^1.6.0"
203
- },
204
- "scripts": {
205
- "dev": "vite",
206
- "build": "vite build"
207
- }
208
- }
209
- ```
210
-
211
- ```yaml
212
- # docker-compose.yml
213
- version: '3.8'
214
-
215
- services:
216
- web:
217
- build: .
218
- ports:
219
- - "3000:3000"
220
- environment:
221
- - NODE_ENV=production
222
- depends_on:
223
- - db
224
-
225
- db:
226
- image: postgres:15
227
- volumes:
228
- - pgdata:/var/lib/postgresql/data
229
- environment:
230
- POSTGRES_PASSWORD: secret
231
-
232
- volumes:
233
- pgdata:
234
- ```
235
-
236
- ## 代码块功能
237
-
238
- ### 自动语言检测
239
-
240
- 代码块顶部会显示语言标识:
241
-
242
- ```python
243
- print("This shows 'python' label")
244
- ```
245
-
246
- ### 代码复制
247
-
248
- 每个代码块右上角有复制按钮,点击即可复制代码。
249
-
250
- ### 代码折叠
251
-
252
- 超过 15 行的代码块会自动折叠,点击"展开代码"查看完整内容:
253
-
254
- ```javascript
255
- // 这是一个较长的代码示例
256
- // 用于演示代码折叠功能
257
-
258
- class EventEmitter {
259
- constructor() {
260
- this.events = {};
261
- }
262
-
263
- on(event, listener) {
264
- if (!this.events[event]) {
265
- this.events[event] = [];
266
- }
267
- this.events[event].push(listener);
268
- return this;
269
- }
270
-
271
- off(event, listener) {
272
- if (!this.events[event]) return this;
273
- this.events[event] = this.events[event].filter(l => l !== listener);
274
- return this;
275
- }
276
-
277
- emit(event, ...args) {
278
- if (!this.events[event]) return false;
279
- this.events[event].forEach(listener => listener.apply(this, args));
280
- return true;
281
- }
282
-
283
- once(event, listener) {
284
- const onceListener = (...args) => {
285
- listener.apply(this, args);
286
- this.off(event, onceListener);
287
- };
288
- return this.on(event, onceListener);
289
- }
290
- }
291
-
292
- // 使用示例
293
- const emitter = new EventEmitter();
294
- emitter.on('data', (data) => console.log(data));
295
- emitter.emit('data', { message: 'Hello!' });
296
- ```
297
-
298
- ## 无语言代码块
299
-
300
- 如果不指定语言,代码块会显示为纯文本:
301
-
302
- ```
303
- 这是纯文本代码块
304
- 不会进行语法高亮
305
- 适合显示命令输出等
306
- ```
307
-
308
- 指定 `text` 或 `plaintext` 也可以:
309
-
310
- ```text
311
- [INFO] 2024-01-01 10:00:00 - Application started
312
- [DEBUG] 2024-01-01 10:00:01 - Loading configuration...
313
- [INFO] 2024-01-01 10:00:02 - Ready to accept connections
314
- ```
315
-
316
- ## 最佳实践
317
-
318
- ### 1. 始终指定语言
319
-
320
- ```markdown
321
- <!-- 好 -->
322
- ```javascript
323
- const x = 1;
324
- ```
325
-
326
- <!-- 不好 -->
327
- ```
328
- const x = 1;
329
- ```
330
- ```
331
-
332
- ### 2. 保持代码简洁
333
-
334
- ```markdown
335
- <!-- 好:只展示关键代码 -->
336
- ```javascript
337
- // 关键实现
338
- const result = data.filter(x => x.active).map(x => x.name);
339
- ```
340
-
341
- <!-- 不好:包含过多无关代码 -->
342
- ```javascript
343
- // 导入模块
344
- import { something } from 'somewhere';
345
- import { another } from 'another-place';
346
- // ... 很多无关代码 ...
347
- const result = data.filter(x => x.active).map(x => x.name);
348
- // ... 更多无关代码 ...
349
- ```
350
- ```
351
-
352
- ### 3. 添加必要注释
353
-
354
- ```javascript
355
- // 使用 reduce 计算总和
356
- const total = numbers.reduce((sum, num) => sum + num, 0);
357
-
358
- // 解构并设置默认值
359
- const { name = 'Anonymous', age = 0 } = user;
360
- ```
361
-
362
- ### 4. 使用正确的语言标识
363
-
364
- ```markdown
365
- <!-- Vue 单文件组件用 vue -->
366
- ```vue
367
- <template>...</template>
368
- ```
369
-
370
- <!-- React JSX 用 jsx 或 tsx -->
371
- ```jsx
372
- function App() {
373
- return <div>Hello</div>;
374
- }
375
- ```
376
-
377
- <!-- 命令行用 bash -->
378
- ```bash
379
- npm install package-name
380
- ```
381
- ```
382
-
383
- ## 下一步
384
-
385
- 学习更多可视化功能:
386
-
387
- - [Mermaid 图表](./06-mermaid) - 绘制流程图、时序图等
388
- - [LaTeX 数学公式](./07-latex) - 数学公式排版