Skip to content

Commit f86dac5

Browse files
authored
Merge pull request microsoft#256159 from mjbvz/eastern-lobster
Restore chat content markdown dom structure
2 parents a8c6c30 + 78c86ac commit f86dac5

File tree

4 files changed

+8
-10
lines changed

4 files changed

+8
-10
lines changed

src/vs/base/browser/markdownRenderer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,11 @@ const defaultMarkedRenderers = Object.freeze({
101101
* **Note** that for most cases you should be using {@link import('../../editor/browser/widget/markdownRenderer/browser/markdownRenderer.js').MarkdownRenderer MarkdownRenderer}
102102
* which comes with support for pretty code block rendering and which uses the default way of handling links.
103103
*/
104-
export function renderMarkdown(markdown: IMarkdownString, options: MarkdownRenderOptions = {}, markedOptions: MarkedOptions = {}): { element: HTMLElement; dispose: () => void } {
104+
export function renderMarkdown(markdown: IMarkdownString, options: MarkdownRenderOptions = {}, markedOptions: MarkedOptions = {}, outElement?: HTMLElement): { element: HTMLElement; dispose: () => void } {
105105
const disposables = new DisposableStore();
106106
let isDisposed = false;
107107

108-
const element = createElement(options);
108+
const element = outElement ?? createElement(options);
109109

110110
const markedInstance = new marked.Marked(...(markedOptions.markedExtensions ?? []));
111111
const { renderer, codeBlocks, syncCodeBlocks } = createMarkdownRenderer(markedInstance, options, markedOptions, markdown);

src/vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@ export class MarkdownRenderer {
4545
@IOpenerService private readonly _openerService: IOpenerService,
4646
) { }
4747

48-
render(markdown: IMarkdownString | undefined, options?: MarkdownRenderOptions, markedOptions?: MarkedOptions): IMarkdownRenderResult {
48+
render(markdown: IMarkdownString | undefined, options?: MarkdownRenderOptions, markedOptions?: MarkedOptions, outElement?: HTMLElement): IMarkdownRenderResult {
4949
if (!markdown) {
50-
const element = document.createElement('span');
50+
const element = outElement ?? document.createElement('span');
5151
return { element, dispose: () => { } };
5252
}
5353

5454
const disposables = new DisposableStore();
55-
const rendered = disposables.add(renderMarkdown(markdown, { ...this._getRenderOptions(markdown, disposables), ...options }, markedOptions));
55+
const rendered = disposables.add(renderMarkdown(markdown, { ...this._getRenderOptions(markdown, disposables), ...options }, markedOptions, outElement));
5656
rendered.element.classList.add('rendered-markdown');
5757
return {
5858
element: rendered.element,

src/vs/workbench/contrib/chat/browser/chatContentParts/chatMarkdownContentPart.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -234,14 +234,12 @@ export class ChatMarkdownContentPart extends Disposable implements IChatContentP
234234
}
235235
},
236236
asyncRenderCallback: () => this._onDidChangeHeight.fire(),
237-
}, markedOpts));
237+
}, markedOpts, this.domNode));
238238

239239
const markdownDecorationsRenderer = instantiationService.createInstance(ChatMarkdownDecorationsRenderer);
240240
this._register(markdownDecorationsRenderer.walkTreeAndAnnotateReferenceLinks(markdown, result.element));
241241

242242
orderedDisposablesList.reverse().forEach(d => this._register(d));
243-
244-
this.domNode.replaceChildren(result.element);
245243
};
246244

247245
if (enableMath && !MarkedKatexSupport.getExtension(dom.getWindow(context.container))) {

src/vs/workbench/contrib/chat/browser/chatMarkdownRenderer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export class ChatMarkdownRenderer extends MarkdownRenderer {
7070
super(options ?? {}, languageService, openerService);
7171
}
7272

73-
override render(markdown: IMarkdownString | undefined, options?: MarkdownRenderOptions, markedOptions?: MarkedOptions): IMarkdownRenderResult {
73+
override render(markdown: IMarkdownString | undefined, options?: MarkdownRenderOptions, markedOptions?: MarkedOptions, outElement?: HTMLElement): IMarkdownRenderResult {
7474
options = {
7575
...options,
7676
remoteImageIsAllowed: (_uri) => false,
@@ -91,7 +91,7 @@ export class ChatMarkdownRenderer extends MarkdownRenderer {
9191
value: `<body>\n\n${markdown.value}</body>`,
9292
}
9393
: markdown;
94-
const result = super.render(mdWithBody, options, markedOptions);
94+
const result = super.render(mdWithBody, options, markedOptions, outElement);
9595

9696
// In some cases, the renderer can return text that is not inside a <p>,
9797
// but our CSS expects text to be in a <p> for margin to be applied properly.

0 commit comments

Comments
 (0)