提交 95f8e3a1 编写于 作者: M Matt Bierner

Move a few more common events into webview base

上级 e5d36bb1
......@@ -10,6 +10,7 @@ import { IEnvironmentService } from 'vs/platform/environment/common/environment'
import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { WebviewExtensionDescription, WebviewOptions } from 'vs/workbench/contrib/webview/browser/webview';
import { URI } from 'vs/base/common/uri';
export const enum WebviewMessageChannels {
onmessage = 'onmessage',
......@@ -55,6 +56,18 @@ export abstract class BaseWebview<T extends HTMLElement> extends Disposable {
this._register(this.on('no-csp-found', () => {
this.handleNoCspFound();
}));
this._register(this.on(WebviewMessageChannels.didClickLink, (uri: string) => {
this._onDidClickLink.fire(URI.parse(uri));
}));
this._register(this.on(WebviewMessageChannels.onmessage, (data: any) => {
this._onMessage.fire(data);
}));
this._register(this.on(WebviewMessageChannels.didScroll, (scrollYPercentage: number) => {
this._onDidScroll.fire({ scrollYPercentage: scrollYPercentage });
}));
}
dispose(): void {
......@@ -69,6 +82,15 @@ export abstract class BaseWebview<T extends HTMLElement> extends Disposable {
private readonly _onMissingCsp = this._register(new Emitter<ExtensionIdentifier>());
public readonly onMissingCsp = this._onMissingCsp.event;
private readonly _onDidClickLink = this._register(new Emitter<URI>());
public readonly onDidClickLink = this._onDidClickLink.event;
private readonly _onMessage = this._register(new Emitter<any>());
public readonly onMessage = this._onMessage.event;
private readonly _onDidScroll = this._register(new Emitter<{ readonly scrollYPercentage: number; }>());
public readonly onDidScroll = this._onDidScroll.event;
protected _send(channel: string, data?: any): void {
this._ready
.then(() => this.postMessage(channel, data))
......
......@@ -62,20 +62,6 @@ export class IFrameWebview extends BaseWebview<HTMLIFrameElement> implements Web
state: undefined
};
this._register(this.on(WebviewMessageChannels.onmessage, (data: any) => {
this._onMessage.fire(data);
}));
this._register(this.on(WebviewMessageChannels.didClickLink, (uri: string) => {
this._onDidClickLink.fire(URI.parse(uri));
}));
this._register(this.on(WebviewMessageChannels.didScroll, () => {
// if (e.args && typeof e.args[0] === 'number') {
// this._onDidScroll.fire({ scrollYPercentage: e.args[0] });
// }
}));
this._register(this.on(WebviewMessageChannels.doReload, () => {
this.reload();
}));
......@@ -186,18 +172,9 @@ export class IFrameWebview extends BaseWebview<HTMLIFrameElement> implements Web
private readonly _onDidFocus = this._register(new Emitter<void>());
public readonly onDidFocus = this._onDidFocus.event;
private readonly _onDidClickLink = this._register(new Emitter<URI>());
public readonly onDidClickLink = this._onDidClickLink.event;
private readonly _onDidScroll = this._register(new Emitter<{ scrollYPercentage: number }>());
public readonly onDidScroll = this._onDidScroll.event;
private readonly _onDidUpdateState = this._register(new Emitter<string | undefined>());
public readonly onDidUpdateState = this._onDidUpdateState.event;
private readonly _onMessage = this._register(new Emitter<any>());
public readonly onMessage = this._onMessage.event;
sendMessage(data: any): void {
this._send('message', data);
}
......
......@@ -295,14 +295,6 @@ export class ElectronWebviewBasedWebview extends BaseWebview<WebviewTag> impleme
console.error('embedded page crashed');
}));
this._register(this.on(WebviewMessageChannels.onmessage, (data: any) => {
this._onMessage.fire(data);
}));
this._register(this.on(WebviewMessageChannels.didClickLink, (uri: string) => {
this._onDidClickLink.fire(URI.parse(uri));
}));
this._register(this.on('synthetic-mouse-event', (rawEvent: any) => {
if (!this.element) {
return;
......@@ -329,10 +321,6 @@ export class ElectronWebviewBasedWebview extends BaseWebview<WebviewTag> impleme
}
}));
this._register(this.on(WebviewMessageChannels.didScroll, (scrollYPercentage: number) => {
this._onDidScroll.fire({ scrollYPercentage: scrollYPercentage });
}));
this._register(this.on(WebviewMessageChannels.doReload, () => {
this.reload();
}));
......@@ -394,18 +382,9 @@ export class ElectronWebviewBasedWebview extends BaseWebview<WebviewTag> impleme
parent.appendChild(this.element);
}
private readonly _onDidClickLink = this._register(new Emitter<URI>());
public readonly onDidClickLink = this._onDidClickLink.event;
private readonly _onDidScroll = this._register(new Emitter<{ scrollYPercentage: number; }>());
public readonly onDidScroll = this._onDidScroll.event;
private readonly _onDidUpdateState = this._register(new Emitter<string | undefined>());
public readonly onDidUpdateState = this._onDidUpdateState.event;
private readonly _onMessage = this._register(new Emitter<any>());
public readonly onMessage = this._onMessage.event;
protected postMessage(channel: string, data?: any): void {
if (this.element) {
this.element.send(channel, data);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册