mirror of
https://github.com/Microsoft/vscode
synced 2024-10-02 17:32:41 +00:00
💄 remove setting renderer knowledge from markdown document renderer (#214955)
This commit is contained in:
parent
594154c8d8
commit
79abdbc1fc
|
@ -774,7 +774,7 @@ export class ExtensionEditor extends EditorPane {
|
|||
return '';
|
||||
}
|
||||
|
||||
const content = await renderMarkdownDocument(contents, this.extensionService, this.languageService, extension.type !== ExtensionType.System, false, token);
|
||||
const content = await renderMarkdownDocument(contents, this.extensionService, this.languageService, { shouldSanitize: extension.type !== ExtensionType.System, token });
|
||||
if (token?.isCancellationRequested) {
|
||||
return '';
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@ import { ILanguageService } from 'vs/editor/common/languages/language';
|
|||
import { tokenizeToString } from 'vs/editor/common/languages/textToHtmlTokenizer';
|
||||
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
|
||||
import { escape } from 'vs/base/common/strings';
|
||||
import { SimpleSettingRenderer } from 'vs/workbench/contrib/markdown/browser/markdownSettingRenderer';
|
||||
|
||||
export const DEFAULT_MARKDOWN_STYLES = `
|
||||
body {
|
||||
|
@ -184,6 +183,13 @@ function sanitize(documentContent: string, allowUnknownProtocols: boolean): stri
|
|||
}
|
||||
}
|
||||
|
||||
interface IRenderMarkdownDocumentOptions {
|
||||
readonly shouldSanitize?: boolean;
|
||||
readonly allowUnknownProtocols?: boolean;
|
||||
readonly renderer?: marked.Renderer;
|
||||
readonly token?: CancellationToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a string of markdown as a document.
|
||||
*
|
||||
|
@ -193,10 +199,7 @@ export async function renderMarkdownDocument(
|
|||
text: string,
|
||||
extensionService: IExtensionService,
|
||||
languageService: ILanguageService,
|
||||
shouldSanitize: boolean = true,
|
||||
allowUnknownProtocols: boolean = false,
|
||||
token?: CancellationToken,
|
||||
settingRenderer?: SimpleSettingRenderer
|
||||
options?: IRenderMarkdownDocumentOptions
|
||||
): Promise<string> {
|
||||
|
||||
const highlight = (code: string, lang: string | undefined, callback: ((error: any, code: string) => void) | undefined): any => {
|
||||
|
@ -210,7 +213,7 @@ export async function renderMarkdownDocument(
|
|||
}
|
||||
|
||||
extensionService.whenInstalledExtensionsRegistered().then(async () => {
|
||||
if (token?.isCancellationRequested) {
|
||||
if (options?.token?.isCancellationRequested) {
|
||||
callback(null, '');
|
||||
return;
|
||||
}
|
||||
|
@ -222,16 +225,11 @@ export async function renderMarkdownDocument(
|
|||
return '';
|
||||
};
|
||||
|
||||
const renderer = new marked.Renderer();
|
||||
if (settingRenderer) {
|
||||
renderer.html = settingRenderer.getHtmlRenderer();
|
||||
}
|
||||
|
||||
return new Promise<string>((resolve, reject) => {
|
||||
marked(text, { highlight, renderer }, (err, value) => err ? reject(err) : resolve(value));
|
||||
marked(text, { highlight, renderer: options?.renderer }, (err, value) => err ? reject(err) : resolve(value));
|
||||
}).then(raw => {
|
||||
if (shouldSanitize) {
|
||||
return sanitize(raw, allowUnknownProtocols);
|
||||
if (options?.shouldSanitize ?? true) {
|
||||
return sanitize(raw, options?.allowUnknownProtocols ?? false);
|
||||
} else {
|
||||
return raw;
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ import { SimpleSettingRenderer } from 'vs/workbench/contrib/markdown/browser/mar
|
|||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { Schemas } from 'vs/base/common/network';
|
||||
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
|
||||
import { marked } from 'vs/base/common/marked/marked';
|
||||
|
||||
export class ReleaseNotesManager {
|
||||
private readonly _simpleSettingRenderer: SimpleSettingRenderer;
|
||||
|
@ -249,7 +250,10 @@ export class ReleaseNotesManager {
|
|||
|
||||
private async renderBody(text: string) {
|
||||
const nonce = generateUuid();
|
||||
const content = await renderMarkdownDocument(text, this._extensionService, this._languageService, false, undefined, undefined, this._simpleSettingRenderer);
|
||||
const renderer = new marked.Renderer();
|
||||
renderer.html = this._simpleSettingRenderer.getHtmlRenderer();
|
||||
|
||||
const content = await renderMarkdownDocument(text, this._extensionService, this._languageService, { shouldSanitize: false, renderer });
|
||||
const colorMap = TokenizationRegistry.getColorMap();
|
||||
const css = colorMap ? generateTokensCSSForColorMap(colorMap) : '';
|
||||
const showReleaseNotes = Boolean(this._configurationService.getValue<boolean>('update.showReleaseNotes'));
|
||||
|
|
|
@ -211,7 +211,7 @@ export class GettingStartedDetailsRenderer {
|
|||
private async readAndCacheStepMarkdown(path: URI, base: URI): Promise<string> {
|
||||
if (!this.mdCache.has(path)) {
|
||||
const contents = await this.readContentsOfPath(path);
|
||||
const markdownContents = await renderMarkdownDocument(transformUris(contents, base), this.extensionService, this.languageService, true, true);
|
||||
const markdownContents = await renderMarkdownDocument(transformUris(contents, base), this.extensionService, this.languageService, { allowUnknownProtocols: true });
|
||||
this.mdCache.set(path, markdownContents);
|
||||
}
|
||||
return assertIsDefined(this.mdCache.get(path));
|
||||
|
|
Loading…
Reference in a new issue