diff --git a/src/node/markdown/markdown.ts b/src/node/markdown/markdown.ts index c225d2b5..36301826 100644 --- a/src/node/markdown/markdown.ts +++ b/src/node/markdown/markdown.ts @@ -185,6 +185,10 @@ export interface MarkdownOptions extends Options { * @see https://vitepress.dev/guide/markdown#github-flavored-alerts */ gfmAlerts?: boolean + /** + * @default 'Copy Code' + */ + codeCopyButtonTitle?: string } export type MarkdownRenderer = MarkdownIt @@ -196,6 +200,7 @@ export const createMarkdownRenderer = async ( logger: Pick = console ): Promise => { const theme = options.theme ?? { light: 'github-light', dark: 'github-dark' } + const codeCopyButtonTitle = options.codeCopyButtonTitle || 'Copy Code' const hasSingleTheme = typeof theme === 'string' || 'name' in theme const md = MarkdownIt({ @@ -215,7 +220,7 @@ export const createMarkdownRenderer = async ( // custom plugins md.use(componentPlugin, { ...options.component }) .use(highlightLinePlugin) - .use(preWrapperPlugin, { hasSingleTheme }) + .use(preWrapperPlugin, { codeCopyButtonTitle, hasSingleTheme }) .use(snippetPlugin, srcDir) .use(containerPlugin, { hasSingleTheme }, options.container) .use(imagePlugin, options.image) diff --git a/src/node/markdown/plugins/preWrapper.ts b/src/node/markdown/plugins/preWrapper.ts index 9e79a4e1..06c18b35 100644 --- a/src/node/markdown/plugins/preWrapper.ts +++ b/src/node/markdown/plugins/preWrapper.ts @@ -1,6 +1,7 @@ import type MarkdownIt from 'markdown-it' export interface Options { + codeCopyButtonTitle: string hasSingleTheme: boolean } @@ -17,10 +18,11 @@ export function preWrapperPlugin(md: MarkdownIt, options: Options) { token.info = token.info.replace(/ active$/, '').replace(/ active /, ' ') const lang = extractLang(token.info) + const title = options.codeCopyButtonTitle const rawCode = fence(...args) return `
${lang}${rawCode}
` + )}${active}">${lang}${rawCode}` } }