diff --git a/extensions/markdown/src/extension.ts b/extensions/markdown/src/extension.ts index 1af59591246..64425e83830 100644 --- a/extensions/markdown/src/extension.ts +++ b/extensions/markdown/src/extension.ts @@ -104,6 +104,20 @@ export function activate(context: vscode.ExtensionContext) { } } + let scripts = contributes['markdown.preview'] && contributes['markdown.preview'].scripts; + if (scripts) { + if (!Array.isArray(scripts)) { + scripts = [scripts]; + } + for (const script of scripts) { + try { + contentProvider.addScript(resolveExtensionResources(extension, script)); + } catch (e) { + // noop + } + } + } + if (contributes['markdownit.plugins']) { extension.activate().then(() => { if (extension.exports && extension.exports.extendMarkdownIt) { diff --git a/extensions/markdown/src/previewContentProvider.ts b/extensions/markdown/src/previewContentProvider.ts index 935e13c6ee8..486faf5100d 100644 --- a/extensions/markdown/src/previewContentProvider.ts +++ b/extensions/markdown/src/previewContentProvider.ts @@ -29,6 +29,7 @@ export class MDDocumentContentProvider implements vscode.TextDocumentContentProv private _onDidChange = new vscode.EventEmitter(); private _waiting: boolean = false; private extraStyles: Array = []; + private extraScripts: Array = []; constructor( private engine: MarkdownEngine, @@ -36,6 +37,10 @@ export class MDDocumentContentProvider implements vscode.TextDocumentContentProv private cspArbiter: ContentSecurityPolicyArbiter ) { } + public addScript(resource: vscode.Uri): void { + this.extraScripts.push(resource); + } + public addStyle(resource: vscode.Uri): void { this.extraStyles.push(resource); } @@ -110,7 +115,8 @@ export class MDDocumentContentProvider implements vscode.TextDocumentContentProv } private getScripts(nonce: string): string { - return [this.getMediaPath('main.js')] + const scripts = [this.getMediaPath('main.js')].concat(this.extraScripts.map(resource => resource.toString())); + return scripts .map(source => ``) .join('\n'); }