Skip to content

Commit c5c3c64

Browse files
authored
fix: title in containers not working with markdown content (#765) (#768)
fix #765
1 parent dc29dba commit c5c3c64

File tree

1 file changed

+15
-19
lines changed

1 file changed

+15
-19
lines changed

src/node/markdown/plugins/containers.ts

+15-19
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,28 @@
11
import MarkdownIt from 'markdown-it'
2+
import { RenderRule } from 'markdown-it/lib/renderer'
23
import Token from 'markdown-it/lib/token'
34
import container from 'markdown-it-container'
45

56
export const containerPlugin = (md: MarkdownIt) => {
6-
md.use(...createContainer('tip', 'TIP'))
7-
.use(...createContainer('info', 'INFO'))
8-
.use(...createContainer('warning', 'WARNING'))
9-
.use(...createContainer('danger', 'DANGER'))
10-
.use(...createContainer('details', 'Details'))
7+
md.use(...createContainer('tip', 'TIP', md))
8+
.use(...createContainer('info', 'INFO', md))
9+
.use(...createContainer('warning', 'WARNING', md))
10+
.use(...createContainer('danger', 'DANGER', md))
11+
.use(...createContainer('details', 'Details', md))
1112
// explicitly escape Vue syntax
1213
.use(container, 'v-pre', {
1314
render: (tokens: Token[], idx: number) =>
1415
tokens[idx].nesting === 1 ? `<div v-pre>\n` : `</div>\n`
1516
})
1617
}
1718

18-
type ContainerArgs = [
19-
typeof container,
20-
string,
21-
{
22-
render(tokens: Token[], idx: number): string
23-
}
24-
]
19+
type ContainerArgs = [typeof container, string, { render: RenderRule }]
2520

26-
function createContainer(klass: string, defaultTitle: string): ContainerArgs {
21+
function createContainer(
22+
klass: string,
23+
defaultTitle: string,
24+
md: MarkdownIt
25+
): ContainerArgs {
2726
return [
2827
container,
2928
klass,
@@ -32,14 +31,11 @@ function createContainer(klass: string, defaultTitle: string): ContainerArgs {
3231
const token = tokens[idx]
3332
const info = token.info.trim().slice(klass.length).trim()
3433
if (token.nesting === 1) {
34+
const title = md.renderInline(info || defaultTitle)
3535
if (klass === 'details') {
36-
return `<details class="${klass} custom-block">${
37-
info ? `<summary>${info}</summary>` : `<summary>Details</summary>`
38-
}\n`
36+
return `<details class="${klass} custom-block"><summary>${title}</summary>\n`
3937
}
40-
return `<div class="${klass} custom-block"><p class="custom-block-title">${
41-
info || defaultTitle
42-
}</p>\n`
38+
return `<div class="${klass} custom-block"><p class="custom-block-title">${title}</p>\n`
4339
} else {
4440
return klass === 'details' ? `</details>\n` : `</div>\n`
4541
}

0 commit comments

Comments
 (0)