This commit is contained in:
Matt Bierner
2022-03-29 13:24:39 -07:00
parent a2d9157a9a
commit 252515e59d
3 changed files with 23 additions and 25 deletions

View File

@@ -7,29 +7,27 @@ import * as vscode from 'vscode';
import * as arrays from './util/arrays';
import { Disposable } from './util/dispose';
const resolveExtensionResource = (extension: vscode.Extension<any>, resourcePath: string): vscode.Uri => {
function resolveExtensionResource(extension: vscode.Extension<any>, resourcePath: string): vscode.Uri {
return vscode.Uri.joinPath(extension.extensionUri, resourcePath);
};
}
const resolveExtensionResources = (extension: vscode.Extension<any>, resourcePaths: unknown): vscode.Uri[] => {
const result: vscode.Uri[] = [];
function* resolveExtensionResources(extension: vscode.Extension<any>, resourcePaths: unknown): Iterable<vscode.Uri> {
if (Array.isArray(resourcePaths)) {
for (const resource of resourcePaths) {
try {
result.push(resolveExtensionResource(extension, resource));
} catch (e) {
yield resolveExtensionResource(extension, resource);
} catch {
// noop
}
}
}
return result;
};
}
export interface MarkdownContributions {
readonly previewScripts: ReadonlyArray<vscode.Uri>;
readonly previewStyles: ReadonlyArray<vscode.Uri>;
readonly previewResourceRoots: ReadonlyArray<vscode.Uri>;
readonly markdownItPlugins: Map<string, Thenable<(md: any) => any>>;
readonly previewScripts: readonly vscode.Uri[];
readonly previewStyles: readonly vscode.Uri[];
readonly previewResourceRoots: readonly vscode.Uri[];
readonly markdownItPlugins: ReadonlyMap<string, Thenable<(md: any) => any>>;
}
export namespace MarkdownContributions {
@@ -60,16 +58,14 @@ export namespace MarkdownContributions {
&& arrays.equals(Array.from(a.markdownItPlugins.keys()), Array.from(b.markdownItPlugins.keys()));
}
export function fromExtension(
extension: vscode.Extension<any>
): MarkdownContributions {
const contributions = extension.packageJSON && extension.packageJSON.contributes;
export function fromExtension(extension: vscode.Extension<any>): MarkdownContributions {
const contributions = extension.packageJSON?.contributes;
if (!contributions) {
return MarkdownContributions.Empty;
}
const previewStyles = getContributedStyles(contributions, extension);
const previewScripts = getContributedScripts(contributions, extension);
const previewStyles = Array.from(getContributedStyles(contributions, extension));
const previewScripts = Array.from(getContributedScripts(contributions, extension));
const previewResourceRoots = previewStyles.length || previewScripts.length ? [extension.extensionUri] : [];
const markdownItPlugins = getContributedMarkdownItPlugins(contributions, extension);
@@ -122,6 +118,7 @@ export interface MarkdownContributionProvider {
}
class VSCodeExtensionMarkdownContributionProvider extends Disposable implements MarkdownContributionProvider {
private _contributions?: MarkdownContributions;
public constructor(
@@ -129,17 +126,19 @@ class VSCodeExtensionMarkdownContributionProvider extends Disposable implements
) {
super();
vscode.extensions.onDidChange(() => {
this._register(vscode.extensions.onDidChange(() => {
const currentContributions = this.getCurrentContributions();
const existingContributions = this._contributions || MarkdownContributions.Empty;
if (!MarkdownContributions.equal(existingContributions, currentContributions)) {
this._contributions = currentContributions;
this._onContributionsChanged.fire(this);
}
}, undefined, this._disposables);
}));
}
public get extensionUri() { return this._extensionContext.extensionUri; }
public get extensionUri() {
return this._extensionContext.extensionUri;
}
private readonly _onContributionsChanged = this._register(new vscode.EventEmitter<this>());
public readonly onContributionsChanged = this._onContributionsChanged.event;

View File

@@ -584,9 +584,6 @@ interface DynamicPreviewInput {
readonly line?: number;
}
/**
* A
*/
export class DynamicMarkdownPreview extends Disposable implements ManagedMarkdownPreview {
public static readonly viewType = 'markdown.preview';

View File

@@ -56,6 +56,7 @@ class PreviewStore<T extends ManagedMarkdownPreview> extends Disposable {
}
export class MarkdownPreviewManager extends Disposable implements vscode.WebviewPanelSerializer, vscode.CustomTextEditorProvider {
private static readonly markdownPreviewActiveContextKey = 'markdownPreviewFocus';
private readonly _topmostLineMonitor = new TopmostLineMonitor();
@@ -73,7 +74,9 @@ export class MarkdownPreviewManager extends Disposable implements vscode.Webview
private readonly _engine: MarkdownEngine,
) {
super();
this._register(vscode.window.registerWebviewPanelSerializer(DynamicMarkdownPreview.viewType, this));
this._register(vscode.window.registerCustomEditorProvider(StaticMarkdownPreview.customEditorViewType, this, {
webviewOptions: { enableFindWidget: true }
}));
@@ -258,4 +261,3 @@ export class MarkdownPreviewManager extends Disposable implements vscode.Webview
vscode.commands.executeCommand('setContext', MarkdownPreviewManager.markdownPreviewActiveContextKey, value);
}
}