mirror of
https://github.com/Microsoft/vscode
synced 2024-09-13 21:55:38 +00:00
Use viewType instead of uri for webviews
As discussed in #45994, move from using a uri to using a viewType. The view type is shared among all webviews of a given type, such as all markdown previews Fixes #44575
This commit is contained in:
parent
18146e8c71
commit
ea1fed9616
|
@ -18,10 +18,8 @@ const localize = nls.loadMessageBundle();
|
|||
|
||||
export class MarkdownPreview {
|
||||
|
||||
public static previewScheme = 'vscode-markdown-preview';
|
||||
private static previewCount = 0;
|
||||
public static previewViewType = 'markdown.preview';
|
||||
|
||||
public readonly uri: vscode.Uri;
|
||||
private readonly webview: vscode.Webview;
|
||||
private throttleTimer: any;
|
||||
private initialLine: number | undefined = undefined;
|
||||
|
@ -41,9 +39,8 @@ export class MarkdownPreview {
|
|||
topmostLineMonitor: MarkdownFileTopmostLineMonitor,
|
||||
private readonly contributions: MarkdownContributions
|
||||
) {
|
||||
this.uri = vscode.Uri.parse(`${MarkdownPreview.previewScheme}:${MarkdownPreview.previewCount++}`);
|
||||
this.webview = vscode.window.createWebview(
|
||||
this.uri,
|
||||
MarkdownPreview.previewViewType,
|
||||
this.getPreviewTitle(this._resource),
|
||||
previewColumn, {
|
||||
enableScripts: true,
|
||||
|
|
10
src/vs/vscode.proposed.d.ts
vendored
10
src/vs/vscode.proposed.d.ts
vendored
|
@ -577,13 +577,13 @@ declare module 'vscode' {
|
|||
}
|
||||
|
||||
/**
|
||||
* A webview is an editor with html content, like an iframe.
|
||||
* A webview displays html content, like an iframe.
|
||||
*/
|
||||
export interface Webview {
|
||||
/**
|
||||
* Unique identifer of the webview.
|
||||
* The type of the webview, such as `'markdownw.preview'`
|
||||
*/
|
||||
readonly uri: Uri;
|
||||
readonly viewType: string;
|
||||
|
||||
/**
|
||||
* Content settings for the webview.
|
||||
|
@ -653,12 +653,12 @@ declare module 'vscode' {
|
|||
/**
|
||||
* Create and show a new webview.
|
||||
*
|
||||
* @param uri Unique identifier for the webview.
|
||||
* @param viewType Identifier the type of the webview.
|
||||
* @param title Title of the webview.
|
||||
* @param column Editor column to show the new webview in.
|
||||
* @param options Content settings for the webview.
|
||||
*/
|
||||
export function createWebview(uri: Uri, title: string, column: ViewColumn, options: WebviewOptions): Webview;
|
||||
export function createWebview(viewType: string, title: string, column: ViewColumn, options: WebviewOptions): Webview;
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
|
|
@ -46,8 +46,15 @@ export class MainThreadWebviews implements MainThreadWebviewsShape {
|
|||
this._toDispose = dispose(this._toDispose);
|
||||
}
|
||||
|
||||
$createWebview(handle: WebviewHandle, uri: URI, title: string, column: Position, options: vscode.WebviewOptions, extensionFolderPath: string): void {
|
||||
const webviewInput = new WebviewInput(URI.revive(uri), title, options, '', {
|
||||
$createWebview(
|
||||
handle: WebviewHandle,
|
||||
viewType: string,
|
||||
title: string,
|
||||
column: Position,
|
||||
options: vscode.WebviewOptions,
|
||||
extensionFolderPath: string
|
||||
): void {
|
||||
const webviewInput = new WebviewInput(URI.parse('webview://' + handle), title, options, '', {
|
||||
onMessage: message => this._proxy.$onMessage(handle, message),
|
||||
onDidChangePosition: position => this._proxy.$onDidChangePosition(handle, position),
|
||||
onDispose: () => {
|
||||
|
|
|
@ -413,8 +413,8 @@ export function createApiFactory(
|
|||
registerDecorationProvider: proposedApiFunction(extension, (provider: vscode.DecorationProvider) => {
|
||||
return extHostDecorations.registerDecorationProvider(provider, extension.id);
|
||||
}),
|
||||
createWebview: proposedApiFunction(extension, (uri: vscode.Uri, title: string, column: vscode.ViewColumn, options: vscode.WebviewOptions) => {
|
||||
return extHostWebviews.createWebview(uri, title, column, options, extension.extensionFolderPath);
|
||||
createWebview: proposedApiFunction(extension, (viewType: string, title: string, column: vscode.ViewColumn, options: vscode.WebviewOptions) => {
|
||||
return extHostWebviews.createWebview(viewType, title, column, options, extension.extensionFolderPath);
|
||||
})
|
||||
};
|
||||
|
||||
|
|
|
@ -350,7 +350,7 @@ export interface MainThreadTelemetryShape extends IDisposable {
|
|||
export type WebviewHandle = number;
|
||||
|
||||
export interface MainThreadWebviewsShape extends IDisposable {
|
||||
$createWebview(handle: WebviewHandle, uri: URI, title: string, column: EditorPosition, options: vscode.WebviewOptions, extensionFolderPath: string): void;
|
||||
$createWebview(handle: WebviewHandle, viewType: string, title: string, column: EditorPosition, options: vscode.WebviewOptions, extensionFolderPath: string): void;
|
||||
$disposeWebview(handle: WebviewHandle): void;
|
||||
$show(handle: WebviewHandle, column: EditorPosition): void;
|
||||
$setTitle(handle: WebviewHandle, value: string): void;
|
||||
|
|
|
@ -12,6 +12,7 @@ import { TPromise } from 'vs/base/common/winjs.base';
|
|||
|
||||
export class ExtHostWebview implements vscode.Webview {
|
||||
|
||||
private readonly _viewType: string;
|
||||
private _title: string;
|
||||
private _html: string;
|
||||
private _options: vscode.WebviewOptions;
|
||||
|
@ -31,10 +32,11 @@ export class ExtHostWebview implements vscode.Webview {
|
|||
constructor(
|
||||
private readonly _handle: WebviewHandle,
|
||||
private readonly _proxy: MainThreadWebviewsShape,
|
||||
private readonly _uri: vscode.Uri,
|
||||
viewType: string,
|
||||
viewColumn: vscode.ViewColumn,
|
||||
options: vscode.WebviewOptions
|
||||
) {
|
||||
this._viewType = viewType;
|
||||
this._viewColumn = viewColumn;
|
||||
this._options = options;
|
||||
}
|
||||
|
@ -52,9 +54,9 @@ export class ExtHostWebview implements vscode.Webview {
|
|||
this.onDidChangeViewStateEmitter.dispose();
|
||||
}
|
||||
|
||||
get uri(): vscode.Uri {
|
||||
get viewType(): string {
|
||||
this.assertNotDisposed();
|
||||
return this._uri;
|
||||
return this._viewType;
|
||||
}
|
||||
|
||||
get title(): string {
|
||||
|
@ -141,16 +143,16 @@ export class ExtHostWebviews implements ExtHostWebviewsShape {
|
|||
}
|
||||
|
||||
createWebview(
|
||||
uri: vscode.Uri,
|
||||
viewType: string,
|
||||
title: string,
|
||||
viewColumn: vscode.ViewColumn,
|
||||
options: vscode.WebviewOptions,
|
||||
extensionFolderPath: string
|
||||
): vscode.Webview {
|
||||
const handle = ExtHostWebviews.handlePool++;
|
||||
this._proxy.$createWebview(handle, uri, title, typeConverters.fromViewColumn(viewColumn), options, extensionFolderPath);
|
||||
this._proxy.$createWebview(handle, viewType, title, typeConverters.fromViewColumn(viewColumn), options, extensionFolderPath);
|
||||
|
||||
const webview = new ExtHostWebview(handle, this._proxy, uri, viewColumn, options);
|
||||
const webview = new ExtHostWebview(handle, this._proxy, viewType, viewColumn, options);
|
||||
this._webviews.set(handle, webview);
|
||||
return webview;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue