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