Prototype webview widget

Start prototyping a webview widget. Code is still super rough
This commit is contained in:
Matt Bierner
2018-04-05 17:28:36 -07:00
parent 5a0ead58d8
commit d7e0604ec6
9 changed files with 178 additions and 14 deletions

View File

@@ -421,6 +421,9 @@ export function createApiFactory(
}),
registerWebviewSerializer: proposedApiFunction(extension, (viewType: string, serializer: vscode.WebviewSerializer) => {
return extHostWebviews.registerWebviewSerializer(viewType, serializer);
}),
showWebviewWidget: proposedApiFunction(extension, (editor: vscode.TextEditor, position: vscode.Position, viewType: string, title: string, options: vscode.WebviewOptions) => {
return extHostWebviews.showWebviewWidget(editor, position.line, viewType, title, options);
})
};

View File

@@ -359,6 +359,8 @@ export interface MainThreadWebviewsShape extends IDisposable {
$registerSerializer(viewType: string): void;
$unregisterSerializer(viewType: string): void;
$showWebviewWidget(handle: WebviewHandle, editorId: string, lineNumber: number, viewType: string, options: vscode.WebviewOptions): void;
}
export interface ExtHostWebviewsShape {

View File

@@ -10,6 +10,7 @@ import * as typeConverters from 'vs/workbench/api/node/extHostTypeConverters';
import { Position } from 'vs/platform/editor/common/editor';
import { TPromise } from 'vs/base/common/winjs.base';
import { Disposable } from './extHostTypes';
import { ExtHostTextEditor } from './extHostTextEditor';
export class ExtHostWebview implements vscode.Webview {
@@ -141,7 +142,7 @@ export class ExtHostWebviews implements ExtHostWebviewsShape {
private readonly _serializers = new Map<string, vscode.WebviewSerializer>();
constructor(
mainContext: IMainContext
mainContext: IMainContext,
) {
this._proxy = mainContext.getProxy(MainContext.MainThreadWebviews);
}
@@ -178,6 +179,15 @@ export class ExtHostWebviews implements ExtHostWebviewsShape {
});
}
async showWebviewWidget(editor: vscode.TextEditor, lineNumber: number, viewType: string, title: string, options: vscode.WebviewOptions) {
const handle = ExtHostWebviews.webviewHandlePool++ + '';
this._proxy.$showWebviewWidget(handle, (editor as ExtHostTextEditor).id, lineNumber, viewType, options);
const webview = new ExtHostWebview(handle, this._proxy, viewType, undefined, options);
this._webviews.set(handle, webview);
return webview;
}
$onMessage(handle: WebviewHandle, message: any): void {
const webview = this.getWebview(handle);
if (webview) {