Skip to content

Commit 176c533

Browse files
committed
Fixes inline vs block markdown rendering issues
1 parent b85bba6 commit 176c533

File tree

1 file changed

+13
-6
lines changed
  • src/webviews/apps/shared/components/markdown

1 file changed

+13
-6
lines changed

src/webviews/apps/shared/components/markdown/markdown.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@ import { customElement, property } from 'lit/decorators.js';
33
import { unsafeHTML } from 'lit/directives/unsafe-html.js';
44
import { until } from 'lit/directives/until.js';
55
import type { RendererObject, RendererThis, Tokens } from 'marked';
6-
import { marked } from 'marked';
6+
import { Marked } from 'marked';
77
import type { ThemeIcon } from 'vscode';
88
import { ruleStyles } from '../../../plus/shared/components/vscode.css';
99

10+
let inlineMarked: Marked | undefined;
11+
let blockMarked: Marked | undefined;
12+
1013
@customElement('gl-markdown')
1114
export class GlMarkdown extends LitElement {
1215
static override styles = [
@@ -124,12 +127,16 @@ export class GlMarkdown extends LitElement {
124127
}
125128

126129
private async renderMarkdown(markdown: string) {
127-
marked.setOptions({ gfm: true });
128-
129-
const renderer = this.inline ? getInlineMarkdownRenderer() : getMarkdownRenderer();
130-
marked.use({ renderer: renderer });
130+
let rendered;
131+
if (this.inline) {
132+
inlineMarked ??= new Marked({ breaks: false, gfm: true, renderer: getInlineMarkdownRenderer() });
133+
// Not using parseInline here, since our custom inline renderer handles lists and other block elements manually for prettier formatting
134+
rendered = await inlineMarked.parse(markdownEscapeEscapedIcons(markdown));
135+
} else {
136+
blockMarked ??= new Marked({ breaks: true, gfm: true, renderer: getMarkdownRenderer() });
137+
rendered = await blockMarked.parse(markdownEscapeEscapedIcons(markdown));
138+
}
131139

132-
let rendered = await marked.parse(markdownEscapeEscapedIcons(markdown));
133140
rendered = renderThemeIconsWithinText(rendered);
134141
return unsafeHTML(rendered);
135142
}

0 commit comments

Comments
 (0)