WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit f5e6971

Browse files
authored
fix: improve code group style in RSS (#634)
1 parent 89ef1c2 commit f5e6971

File tree

3 files changed

+83
-1
lines changed

3 files changed

+83
-1
lines changed

.vitepress/config/rss.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { Author, Feed } from "feed";
2+
import container from "markdown-it-container";
3+
import type Token from "markdown-it/lib/token.mjs";
24
import { mkdirSync, writeFileSync } from "node:fs";
35
import path from "node:path";
4-
import { createContentLoader, defineConfig, type SiteConfig } from "vitepress";
6+
import { createContentLoader, createMarkdownRenderer, defineConfig, type SiteConfig } from "vitepress";
57
import { TEAM_MEMBERS_MAP } from "../theme/constants/team";
68
import { sharedConfig } from "./shared";
79

@@ -37,6 +39,39 @@ export const rssConfig = defineConfig({
3739
copyright: sharedConfig.themeConfig!.footer!.copyright!,
3840
});
3941

42+
const md = await createMarkdownRenderer(
43+
config.srcDir,
44+
config.markdown,
45+
config.site.base,
46+
config.logger,
47+
);
48+
// Wrap code groups with <table>s
49+
// Reference: https://github.com/vuejs/vitepress/blob/179ee6/src/node/markdown/plugins/preWrapper.ts#L8
50+
md.use(md => {
51+
const fence = md.renderer.rules.fence!;
52+
md.renderer.rules.fence = (...args) => {
53+
const [tokens, idx] = args;
54+
const token = tokens[idx];
55+
56+
const title = token.info.match(/\[(.*)\]/)?.[1];
57+
// Code blocks in a code group have titles
58+
return title == null
59+
? fence(...args)
60+
: (
61+
"<tr>"
62+
+ `<td>${title}</td>`
63+
+ `<td>${fence(...args)}</td>`
64+
+ "</tr>"
65+
);
66+
};
67+
});
68+
// Override https://github.com/vuejs/vitepress/blob/179ee6/src/node/markdown/plugins/containers.ts#L26
69+
md.use(container, "code-group", {
70+
render(tokens: Token[], idx: number) {
71+
return tokens[idx].nesting === 1 ? "<table><tbody>" : "</tbody></table>\n";
72+
},
73+
});
74+
// `createMarkdownRenderer` returns a cached global renderer, so the above modifications will be applied to the next rendering
4075
const posts = await createContentLoader("blog/*.md", {
4176
excerpt: true,
4277
render: true,

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
"prepare": "husky"
1717
},
1818
"devDependencies": {
19+
"@types/markdown-it": "^14.1.2",
20+
"@types/markdown-it-container": "^2.0.10",
1921
"@types/node": "^24.3.1",
2022
"@vueuse/core": "^14.0.0",
2123
"degit": "^2.8.4",
@@ -24,6 +26,7 @@
2426
"feed": "^5.1.0",
2527
"husky": "^9.1.7",
2628
"lint-staged": "16.2.6",
29+
"markdown-it-container": "^4.0.0",
2730
"oxc-minify": "^0.97.0",
2831
"oxlint": "^1.14.0",
2932
"typescript": "~5.9.2",

pnpm-lock.yaml

Lines changed: 44 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)