diff --git a/extensions/markdown/package.json b/extensions/markdown/package.json index 5c7f6d8c0ed0dc86aded48c6e066eab3da26054e..4a14d0e85431466ccad48c8544d51f307505a35b 100644 --- a/extensions/markdown/package.json +++ b/extensions/markdown/package.json @@ -47,7 +47,6 @@ "source.js": "javascript", "source.css": "css", "meta.embedded.block.frontmatter": "yaml", - "meta.embedded.block.css": "css", "meta.embedded.block.ini": "ini", "meta.embedded.block.java": "java", @@ -212,7 +211,8 @@ "markdown.styles": { "type": "array", "default": [], - "description": "%markdown.styles.dec%" + "description": "%markdown.styles.dec%", + "scope": "resource" }, "markdown.previewFrontMatter": { "type": "string", @@ -221,52 +221,62 @@ "show" ], "default": "hide", - "description": "%markdown.previewFrontMatter.dec%" + "description": "%markdown.previewFrontMatter.dec%", + "scope": "resource" }, "markdown.preview.breaks": { "type": "boolean", "default": false, - "description": "%markdown.preview.breaks.desc%" + "description": "%markdown.preview.breaks.desc%", + "scope": "resource" }, "markdown.preview.linkify": { "type": "boolean", "default": true, - "description": "%markdown.preview.linkify%" + "description": "%markdown.preview.linkify%", + "scope": "resource" }, "markdown.preview.fontFamily": { "type": "string", "default": "-apple-system, BlinkMacSystemFont, 'Segoe WPC', 'Segoe UI', 'HelveticaNeue-Light', 'Ubuntu', 'Droid Sans', sans-serif", - "description": "%markdown.preview.fontFamily.desc%" + "description": "%markdown.preview.fontFamily.desc%", + "scope": "resource" }, "markdown.preview.fontSize": { "type": "number", "default": 14, - "description": "%markdown.preview.fontSize.desc%" + "description": "%markdown.preview.fontSize.desc%", + "scope": "resource" }, "markdown.preview.lineHeight": { "type": "number", "default": 1.6, - "description": "%markdown.preview.lineHeight.desc%" + "description": "%markdown.preview.lineHeight.desc%", + "scope": "resource" }, "markdown.preview.scrollPreviewWithEditorSelection": { "type": "boolean", "default": true, - "description": "%markdown.preview.scrollPreviewWithEditorSelection.desc%" + "description": "%markdown.preview.scrollPreviewWithEditorSelection.desc%", + "scope": "resource" }, "markdown.preview.markEditorSelection": { "type": "boolean", "default": true, - "description": "%markdown.preview.markEditorSelection.desc%" + "description": "%markdown.preview.markEditorSelection.desc%", + "scope": "resource" }, "markdown.preview.scrollEditorWithPreview": { "type": "boolean", "default": true, - "description": "%markdown.preview.scrollEditorWithPreview.desc%" + "description": "%markdown.preview.scrollEditorWithPreview.desc%", + "scope": "resource" }, "markdown.preview.doubleClickToSwitchToEditor": { "type": "boolean", "default": true, - "description": "%markdown.preview.doubleClickToSwitchToEditor.desc%" + "description": "%markdown.preview.doubleClickToSwitchToEditor.desc%", + "scope": "resource" }, "markdown.trace": { "type": "string", @@ -275,7 +285,8 @@ "verbose" ], "default": "off", - "description": "%markdown.trace.desc%" + "description": "%markdown.trace.desc%", + "scope": "window" } } }, @@ -310,4 +321,4 @@ "gulp-rename": "^1.2.2", "gulp-replace": "^0.5.4" } -} \ No newline at end of file +} diff --git a/extensions/markdown/src/previewContentProvider.ts b/extensions/markdown/src/previewContentProvider.ts index 870816c1eeb35bf1129d80c4a3bf938211c63b75..64d51eccd1f3ade2d3184f2b821a1e18cc774cca 100644 --- a/extensions/markdown/src/previewContentProvider.ts +++ b/extensions/markdown/src/previewContentProvider.ts @@ -38,8 +38,8 @@ export function getMarkdownUri(uri: vscode.Uri) { } class MarkdownPreviewConfig { - public static getCurrentConfig() { - return new MarkdownPreviewConfig(); + public static getConfigForResource(resource: vscode.Uri) { + return new MarkdownPreviewConfig(resource); } public readonly scrollBeyondLastLine: boolean; @@ -56,10 +56,10 @@ class MarkdownPreviewConfig { public readonly fontFamily: string | undefined; public readonly styles: string[]; - private constructor() { - const editorConfig = vscode.workspace.getConfiguration('editor'); - const markdownConfig = vscode.workspace.getConfiguration('markdown'); - const markdownEditorConfig = vscode.workspace.getConfiguration('[markdown]'); + private constructor(resource: vscode.Uri) { + const editorConfig = vscode.workspace.getConfiguration('editor', resource); + const markdownConfig = vscode.workspace.getConfiguration('markdown', resource); + const markdownEditorConfig = vscode.workspace.getConfiguration('[markdown]', resource); this.scrollBeyondLastLine = editorConfig.get('scrollBeyondLastLine', false); @@ -111,8 +111,6 @@ export class MDDocumentContentProvider implements vscode.TextDocumentContentProv private _onDidChange = new vscode.EventEmitter(); private _waiting: boolean = false; - private config: MarkdownPreviewConfig; - private extraStyles: Array = []; private extraScripts: Array = []; @@ -121,9 +119,7 @@ export class MDDocumentContentProvider implements vscode.TextDocumentContentProv private context: vscode.ExtensionContext, private cspArbiter: ContentSecurityPolicyArbiter, private logger: Logger - ) { - this.config = MarkdownPreviewConfig.getCurrentConfig(); - } + ) { } public addScript(resource: vscode.Uri): void { this.extraScripts.push(resource); @@ -163,34 +159,34 @@ export class MDDocumentContentProvider implements vscode.TextDocumentContentProv return vscode.Uri.file(path.join(path.dirname(resource.fsPath), href)).toString(); } - private computeCustomStyleSheetIncludes(uri: vscode.Uri): string { - if (this.config.styles && Array.isArray(this.config.styles)) { - return this.config.styles.map((style) => { - return ``; + private computeCustomStyleSheetIncludes(resource: vscode.Uri, config: MarkdownPreviewConfig): string { + if (config.styles && Array.isArray(config.styles)) { + return config.styles.map(style => { + return ``; }).join('\n'); } return ''; } - private getSettingsOverrideStyles(nonce: string): string { + private getSettingsOverrideStyles(nonce: string, config: MarkdownPreviewConfig): string { return ``; } - private getStyles(resource: vscode.Uri, nonce: string): string { + private getStyles(resource: vscode.Uri, nonce: string, config: MarkdownPreviewConfig): string { const baseStyles = [ this.getMediaPath('markdown.css'), this.getMediaPath('tomorrow.css') ].concat(this.extraStyles.map(resource => resource.toString())); return `${baseStyles.map(href => ``).join('\n')} - ${this.getSettingsOverrideStyles(nonce)} - ${this.computeCustomStyleSheetIncludes(resource)}`; + ${this.getSettingsOverrideStyles(nonce, config)} + ${this.computeCustomStyleSheetIncludes(resource, config)}`; } private getScripts(nonce: string): string { @@ -210,15 +206,15 @@ export class MDDocumentContentProvider implements vscode.TextDocumentContentProv } const document = await vscode.workspace.openTextDocument(sourceUri); - this.config = MarkdownPreviewConfig.getCurrentConfig(); + const config = MarkdownPreviewConfig.getConfigForResource(sourceUri); const initialData = { previewUri: uri.toString(), source: sourceUri.toString(), line: initialLine, - scrollPreviewWithEditorSelection: this.config.scrollPreviewWithEditorSelection, - scrollEditorWithPreview: this.config.scrollEditorWithPreview, - doubleClickToSwitchToEditor: this.config.doubleClickToSwitchToEditor + scrollPreviewWithEditorSelection: config.scrollPreviewWithEditorSelection, + scrollEditorWithPreview: config.scrollEditorWithPreview, + doubleClickToSwitchToEditor: config.doubleClickToSwitchToEditor }; this.logger.log('provideTextDocumentContent', initialData); @@ -227,7 +223,7 @@ export class MDDocumentContentProvider implements vscode.TextDocumentContentProv const nonce = new Date().getTime() + '' + new Date().getMilliseconds(); const csp = this.getCspForResource(sourceUri, nonce); - const body = await this.engine.render(sourceUri, this.config.previewFrontMatter === 'hide', document.getText()); + const body = await this.engine.render(sourceUri, config.previewFrontMatter === 'hide', document.getText()); return ` @@ -236,10 +232,10 @@ export class MDDocumentContentProvider implements vscode.TextDocumentContentProv - ${this.getStyles(sourceUri, nonce)} + ${this.getStyles(sourceUri, nonce, config)} - + ${body}
${this.getScripts(nonce)} @@ -248,14 +244,10 @@ export class MDDocumentContentProvider implements vscode.TextDocumentContentProv } public updateConfiguration() { - const newConfig = MarkdownPreviewConfig.getCurrentConfig(); - if (!this.config.isEqualTo(newConfig)) { - this.config = newConfig; - // update all generated md documents - for (const document of vscode.workspace.textDocuments) { - if (document.uri.scheme === 'markdown') { - this.update(document.uri); - } + // update all generated md documents + for (const document of vscode.workspace.textDocuments) { + if (document.uri.scheme === 'markdown') { + this.update(document.uri); } } }