提交 3443216c 编写于 作者: M Matt Bierner

Allow multiple revivers to be registered for a given webview

上级 612048a1
......@@ -75,7 +75,7 @@ export interface WebviewInputOptions extends vscode.WebviewOptions, vscode.Webvi
export class WebviewEditorService implements IWebviewEditorService {
_serviceBrand: any;
private readonly _revivers = new Map<string, WebviewReviver>();
private readonly _revivers = new Map<string, WebviewReviver[]>();
private _awaitingRevival: { input: WebviewEditorInput, resolve: (x: any) => void }[] = [];
constructor(
......@@ -141,10 +141,11 @@ export class WebviewEditorService implements IWebviewEditorService {
reviver: WebviewReviver
): IDisposable {
if (this._revivers.has(viewType)) {
throw new Error(`Reviver for '${viewType}' already registered`);
this._revivers.get(viewType).push(reviver);
} else {
this._revivers.set(viewType, [reviver]);
}
this._revivers.set(viewType, reviver);
// Resolve any pending views
const toRevive = this._awaitingRevival.filter(x => x.input.viewType === viewType);
......@@ -163,18 +164,23 @@ export class WebviewEditorService implements IWebviewEditorService {
webview: WebviewEditorInput
): boolean {
const viewType = webview.viewType;
return this._revivers.has(viewType) && this._revivers.get(viewType).canRevive(webview);
return this._revivers.has(viewType) && this._revivers.get(viewType).some(reviver => reviver.canRevive(webview));
}
private async tryRevive(
webview: WebviewEditorInput
): TPromise<boolean> {
const reviver = this._revivers.get(webview.viewType);
if (!reviver) {
const revivers = this._revivers.get(webview.viewType);
if (!revivers) {
return false;
}
for (const reviver of revivers) {
if (reviver.canRevive(webview)) {
await reviver.reviveWebview(webview);
return true;
}
}
return false;
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册