提交 721886ce 编写于 作者: M Matt Bierner

Allow registerWebviewEditorProvider to pass in a set of initial webview options

Fixes #82128
上级 881e9264
......@@ -1090,6 +1090,7 @@ declare module 'vscode' {
export function registerWebviewEditorProvider(
viewType: string,
provider: WebviewEditorProvider,
options?: WebviewPanelOptions
): Disposable;
}
......
......@@ -258,7 +258,7 @@ export class MainThreadWebviews extends Disposable implements MainThreadWebviews
this._revivers.delete(viewType);
}
public $registerEditorProvider(viewType: string, extensionId: ExtensionIdentifier, extensionLocation: UriComponents): void {
public $registerEditorProvider(viewType: string, extensionId: ExtensionIdentifier, extensionLocation: UriComponents, options: modes.IWebviewPanelOptions): void {
if (this._editorProviders.has(viewType)) {
throw new Error(`Provider for ${viewType} already registered`);
}
......@@ -274,6 +274,7 @@ export class MainThreadWebviews extends Disposable implements MainThreadWebviews
this._webviewInputs.add(handle, webviewInput);
this.hookupWebviewEventDelegate(handle, webviewInput);
webviewInput.webview.options = options;
webviewInput.webview.extension = extension;
if (webviewInput instanceof CustomFileEditorInput) {
......
......@@ -530,9 +530,9 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
registerWebviewPanelSerializer: (viewType: string, serializer: vscode.WebviewPanelSerializer) => {
return extHostWebviews.registerWebviewPanelSerializer(extension, viewType, serializer);
},
registerWebviewEditorProvider: (viewType: string, provider: vscode.WebviewEditorProvider) => {
registerWebviewEditorProvider: (viewType: string, provider: vscode.WebviewEditorProvider, options?: vscode.WebviewPanelOptions) => {
checkProposedApiEnabled(extension);
return extHostWebviews.registerWebviewEditorProvider(extension, viewType, provider);
return extHostWebviews.registerWebviewEditorProvider(extension, viewType, provider, options);
},
registerDecorationProvider(provider: vscode.DecorationProvider) {
checkProposedApiEnabled(extension);
......
......@@ -556,7 +556,7 @@ export interface MainThreadWebviewsShape extends IDisposable {
$registerSerializer(viewType: string): void;
$unregisterSerializer(viewType: string): void;
$registerEditorProvider(viewType: string, extensionId: ExtensionIdentifier, extensionLocation: UriComponents): void;
$registerEditorProvider(viewType: string, extensionId: ExtensionIdentifier, extensionLocation: UriComponents, options: modes.IWebviewPanelOptions): void;
$unregisterEditorProvider(viewType: string): void;
}
......
......@@ -318,13 +318,14 @@ export class ExtHostWebviews implements ExtHostWebviewsShape {
extension: IExtensionDescription,
viewType: string,
provider: vscode.WebviewEditorProvider,
options?: vscode.WebviewPanelOptions,
): vscode.Disposable {
if (this._editorProviders.has(viewType)) {
throw new Error(`Editor provider for '${viewType}' already registered`);
}
this._editorProviders.set(viewType, { extension, provider, });
this._proxy.$registerEditorProvider(viewType, extension.identifier, extension.extensionLocation);
this._proxy.$registerEditorProvider(viewType, extension.identifier, extension.extensionLocation, options || {});
return new Disposable(() => {
this._editorProviders.delete(viewType);
......
......@@ -26,17 +26,23 @@ export class DynamicWebviewEditorOverlay extends Disposable implements WebviewEd
private _state: string | undefined = undefined;
private _extension: WebviewExtensionDescription | undefined;
private _contentOptions: WebviewContentOptions;
private _options: WebviewOptions;
private _owner: any = undefined;
public constructor(
private readonly id: string,
public readonly options: WebviewOptions,
private _contentOptions: WebviewContentOptions,
initialOptions: WebviewOptions,
initialContentOptions: WebviewContentOptions,
@IWorkbenchLayoutService private readonly _layoutService: IWorkbenchLayoutService,
@IWebviewService private readonly _webviewService: IWebviewService
) {
super();
this._options = initialOptions;
this._contentOptions = initialContentOptions;
this._register(toDisposable(() => this.container.remove()));
}
......@@ -64,7 +70,7 @@ export class DynamicWebviewEditorOverlay extends Disposable implements WebviewEd
}
this._owner = undefined;
this.container.style.visibility = 'hidden';
if (!this.options.retainContextWhenHidden) {
if (!this._options.retainContextWhenHidden) {
this._webview.clear();
this._webviewEvents.clear();
}
......@@ -85,12 +91,12 @@ export class DynamicWebviewEditorOverlay extends Disposable implements WebviewEd
private show() {
if (!this._webview.value) {
const webview = this._webviewService.createWebview(this.id, this.options, this._contentOptions);
const webview = this._webviewService.createWebview(this.id, this._options, this._contentOptions);
this._webview.value = webview;
webview.state = this._state;
webview.html = this._html;
webview.extension = this._extension;
if (this.options.tryRestoreScrollPosition) {
if (this._options.tryRestoreScrollPosition) {
webview.initialScrollProgress = this._initialScrollProgress;
}
this._webview.value.mountTo(this.container);
......@@ -136,6 +142,9 @@ export class DynamicWebviewEditorOverlay extends Disposable implements WebviewEd
this.withWebview(webview => webview.state = value);
}
public get options(): WebviewOptions { return this._options; }
public set options(value: WebviewOptions) { this._options = value; }
public get contentOptions(): WebviewContentOptions { return this._contentOptions; }
public set contentOptions(value: WebviewContentOptions) {
this._contentOptions = value;
......
......@@ -90,7 +90,7 @@ export interface WebviewElement extends Webview {
export interface WebviewEditorOverlay extends Webview {
readonly container: HTMLElement;
readonly options: WebviewOptions;
options: WebviewOptions;
claim(owner: any): void;
release(owner: any): void;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册