Use webview service for creating webviews (#6470)

* modify to use webview service

* fix wrong inject
This commit is contained in:
Anthony Dresser
2019-07-26 22:40:35 -07:00
committed by GitHub
parent 371504358d
commit aacf1e7f1c
18 changed files with 42 additions and 41 deletions

View File

@@ -5,7 +5,7 @@
import 'vs/css!sql/media/icons/common-icons';
import { WebViewDialog } from 'sql/workbench/parts/webview/electron-browser/webViewDialog';
import { WebViewDialog } from 'sql/workbench/parts/webview/browser/webViewDialog';
import { MainThreadModalDialogShape, SqlMainContext, SqlExtHostContext, ExtHostModalDialogsShape } from 'sql/workbench/api/common/sqlExtHost.protocol';
import { IExtHostContext } from 'vs/workbench/api/common/extHost.protocol';

View File

@@ -16,7 +16,7 @@ import ButtonComponent from './button.component';
import CheckBoxComponent from './checkbox.component';
import TreeComponent from './tree.component';
import RadioButtonComponent from './radioButton.component';
import WebViewComponent from '../../electron-browser/modelComponents/webview.component';
import WebViewComponent from './webview.component';
import TableComponent from './table.component';
import TextComponent from './text.component';
import LoadingComponent from './loadingComponent.component';

View File

@@ -13,13 +13,12 @@ import { addDisposableListener, EventType } from 'vs/base/browser/dom';
import { URI, UriComponents } from 'vs/base/common/uri';
import { IOpenerService } from 'vs/platform/opener/common/opener';
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
import { IContextKey } from 'vs/platform/contextkey/common/contextkey';
import { WebviewContentOptions, IWebviewService, WebviewElement } from 'vs/workbench/contrib/webview/common/webview';
import { generateUuid } from 'vs/base/common/uuid';
import { ComponentBase } from 'sql/workbench/browser/modelComponents/componentBase';
import { IComponent, IComponentDescriptor, IModelStore, ComponentEventType } from 'sql/workbench/browser/modelComponents/interfaces';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IContextKey } from 'vs/platform/contextkey/common/contextkey';
import { ElectronWebviewBasedWebview } from 'vs/workbench/contrib/webview/electron-browser/webviewElement';
import { WebviewContentOptions } from 'vs/workbench/contrib/webview/common/webview';
function reviveWebviewOptions(options: vscode.WebviewOptions): vscode.WebviewOptions {
return {
@@ -38,7 +37,7 @@ export default class WebViewComponent extends ComponentBase implements IComponen
private static readonly standardSupportedLinkSchemes = ['http', 'https', 'mailto'];
private _webview: ElectronWebviewBasedWebview;
private _webview: WebviewElement;
private _renderedHtml: string;
private _extensionLocationUri: URI;
private _ready: Promise<void>;
@@ -46,12 +45,14 @@ export default class WebViewComponent extends ComponentBase implements IComponen
protected contextKey: IContextKey<boolean>;
protected findInputFocusContextKey: IContextKey<boolean>;
private readonly id = generateUuid();
constructor(
@Inject(forwardRef(() => ChangeDetectorRef)) changeRef: ChangeDetectorRef,
@Inject(forwardRef(() => ElementRef)) el: ElementRef,
@Inject(IOpenerService) private readonly _openerService: IOpenerService,
@Inject(IWorkspaceContextService) private readonly _contextService: IWorkspaceContextService,
@Inject(IInstantiationService) private instantiationService: IInstantiationService,
@Inject(IWebviewService) private readonly webviewService: IWebviewService
) {
super(changeRef, el);
}
@@ -65,7 +66,7 @@ export default class WebViewComponent extends ComponentBase implements IComponen
}
private _createWebview(): void {
this._webview = this.instantiationService.createInstance(ElectronWebviewBasedWebview,
this._webview = this.webviewService.createWebview(this.id,
{
allowSvgs: true
},

View File

@@ -11,7 +11,7 @@ import { registerContainer, generateContainerTypeSchemaProperties } from 'sql/pl
import { NAV_SECTION, validateNavSectionContributionAndRegisterIcon } from 'sql/workbench/parts/dashboard/browser/containers/dashboardNavSection.contribution';
import { WIDGETS_CONTAINER, validateWidgetContainerContribution } from 'sql/workbench/parts/dashboard/browser/containers/dashboardWidgetContainer.contribution';
import { GRID_CONTAINER, validateGridContainerContribution } from 'sql/workbench/parts/dashboard/browser/containers/dashboardGridContainer.contribution';
import { WEBVIEW_CONTAINER } from 'sql/workbench/parts/dashboard/electron-browser/containers/dashboardWebviewContainer.contribution';
import { WEBVIEW_CONTAINER } from 'sql/workbench/parts/dashboard/browser/containers/dashboardWebviewContainer.contribution';
const containerTypes = [
WIDGETS_CONTAINER,

View File

@@ -11,7 +11,7 @@ import { CommonServiceInterface } from 'sql/platform/bootstrap/browser/commonSer
import { TabConfig, WidgetConfig } from 'sql/workbench/parts/dashboard/browser/core/dashboardWidget';
import { DashboardWidgetWrapper } from 'sql/workbench/parts/dashboard/browser/contents/dashboardWidgetWrapper.component';
import { DashboardTab } from 'sql/workbench/parts/dashboard/browser/core/interfaces';
import { WebviewContent } from 'sql/workbench/parts/dashboard/electron-browser/contents/webviewContent.component';
import { WebviewContent } from 'sql/workbench/parts/dashboard/browser/contents/webviewContent.component';
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
import { Event, Emitter } from 'vs/base/common/event';

View File

@@ -11,7 +11,7 @@ import { Event, Emitter } from 'vs/base/common/event';
import { DashboardTab } from 'sql/workbench/parts/dashboard/browser/core/interfaces';
import { TabConfig } from 'sql/workbench/parts/dashboard/browser/core/dashboardWidget';
import { WebviewContent } from 'sql/workbench/parts/dashboard/electron-browser/contents/webviewContent.component';
import { WebviewContent } from 'sql/workbench/parts/dashboard/browser/contents/webviewContent.component';
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
@Component({

View File

@@ -22,7 +22,7 @@ import { PropertiesWidgetComponent } from 'sql/workbench/parts/dashboard/browser
import { ExplorerWidget } from 'sql/workbench/parts/dashboard/browser/widgets/explorer/explorerWidget.component';
import { TasksWidget } from 'sql/workbench/parts/dashboard/browser/widgets/tasks/tasksWidget.component';
import { InsightsWidget } from 'sql/workbench/parts/dashboard/browser/widgets/insights/insightsWidget.component';
import { WebviewWidget } from 'sql/workbench/parts/dashboard/electron-browser/widgets/webview/webviewWidget.component';
import { WebviewWidget } from 'sql/workbench/parts/dashboard/browser/widgets/webview/webviewWidget.component';
import { CommonServiceInterface } from 'sql/platform/bootstrap/browser/commonServiceInterface.service';

View File

@@ -15,10 +15,9 @@ import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/browser
import { CommonServiceInterface } from 'sql/platform/bootstrap/browser/commonServiceInterface.service';
import { IDashboardWebview, IDashboardViewService } from 'sql/platform/dashboard/common/dashboardViewService';
import { AngularDisposable } from 'sql/base/browser/lifecycle';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import * as azdata from 'azdata';
import { ElectronWebviewBasedWebview } from 'vs/workbench/contrib/webview/electron-browser/webviewElement';
import { WebviewElement, IWebviewService } from 'vs/workbench/contrib/webview/common/webview';
@Component({
template: '',
@@ -33,14 +32,14 @@ export class WebviewContent extends AngularDisposable implements OnInit, IDashbo
public readonly onMessage: Event<string> = this._onMessage.event;
private _onMessageDisposable: IDisposable;
private _webview: ElectronWebviewBasedWebview;
private _webview: WebviewElement;
private _html: string;
constructor(
@Inject(forwardRef(() => CommonServiceInterface)) private _dashboardService: DashboardServiceInterface,
@Inject(forwardRef(() => ElementRef)) private _el: ElementRef,
@Inject(IDashboardViewService) private dashboardViewService: IDashboardViewService,
@Inject(IInstantiationService) private instantiationService: IInstantiationService
@Inject(forwardRef(() => CommonServiceInterface)) private readonly _dashboardService: DashboardServiceInterface,
@Inject(forwardRef(() => ElementRef)) private readonly _el: ElementRef,
@Inject(IDashboardViewService) private readonly dashboardViewService: IDashboardViewService,
@Inject(IWebviewService) private readonly webviewService: IWebviewService
) {
super();
}
@@ -100,7 +99,7 @@ export class WebviewContent extends AngularDisposable implements OnInit, IDashbo
this._onMessageDisposable.dispose();
}
this._webview = this.instantiationService.createInstance(ElectronWebviewBasedWebview,
this._webview = this.webviewService.createWebview(this.id,
{},
{
allowScripts: true

View File

@@ -15,7 +15,7 @@ import { ConnectionManagementInfo } from 'sql/platform/connection/common/connect
import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/browser/services/dashboardServiceInterface.service';
import { WIDGETS_CONTAINER } from 'sql/workbench/parts/dashboard/browser/containers/dashboardWidgetContainer.contribution';
import { GRID_CONTAINER } from 'sql/workbench/parts/dashboard/browser/containers/dashboardGridContainer.contribution';
import { WEBVIEW_CONTAINER } from 'sql/workbench/parts/dashboard/electron-browser/containers/dashboardWebviewContainer.contribution';
import { WEBVIEW_CONTAINER } from 'sql/workbench/parts/dashboard/browser/containers/dashboardWebviewContainer.contribution';
import { MODELVIEW_CONTAINER } from 'sql/workbench/parts/dashboard/browser/containers/dashboardModelViewContainer.contribution';
import { CONTROLHOST_CONTAINER } from 'sql/workbench/parts/dashboard/browser/containers/dashboardControlHostContainer.contribution';
import { NAV_SECTION } from 'sql/workbench/parts/dashboard/browser/containers/dashboardNavSection.contribution';

View File

@@ -37,14 +37,14 @@ import { DashboardComponent } from 'sql/workbench/parts/dashboard/browser/dashbo
import { DashboardWidgetWrapper } from 'sql/workbench/parts/dashboard/browser/contents/dashboardWidgetWrapper.component';
import { DashboardWidgetContainer } from 'sql/workbench/parts/dashboard/browser/containers/dashboardWidgetContainer.component';
import { DashboardGridContainer } from 'sql/workbench/parts/dashboard/browser/containers/dashboardGridContainer.component';
import { DashboardWebviewContainer } from 'sql/workbench/parts/dashboard/electron-browser/containers/dashboardWebviewContainer.component';
import { DashboardWebviewContainer } from 'sql/workbench/parts/dashboard/browser/containers/dashboardWebviewContainer.component';
import { DashboardModelViewContainer } from 'sql/workbench/parts/dashboard/browser/containers/dashboardModelViewContainer.component';
import { DashboardErrorContainer } from 'sql/workbench/parts/dashboard/browser/containers/dashboardErrorContainer.component';
import { DashboardNavSection } from 'sql/workbench/parts/dashboard/browser/containers/dashboardNavSection.component';
import { WidgetContent } from 'sql/workbench/parts/dashboard/browser/contents/widgetContent.component';
import { ModelViewContent } from 'sql/workbench/browser/modelComponents/modelViewContent.component';
import { ModelComponentWrapper } from 'sql/workbench/browser/modelComponents/modelComponentWrapper.component';
import { WebviewContent } from 'sql/workbench/parts/dashboard/electron-browser/contents/webviewContent.component';
import { WebviewContent } from 'sql/workbench/parts/dashboard/browser/contents/webviewContent.component';
import { BreadcrumbComponent } from 'sql/base/browser/ui/breadcrumb/breadcrumb.component';
import { IBreadcrumbService } from 'sql/base/browser/ui/breadcrumb/interfaces';
import { DashboardHomeContainer } from 'sql/workbench/parts/dashboard/browser/containers/dashboardHomeContainer.component';
@@ -84,7 +84,7 @@ import { PropertiesWidgetComponent } from 'sql/workbench/parts/dashboard/browser
import { ExplorerWidget } from 'sql/workbench/parts/dashboard/browser/widgets/explorer/explorerWidget.component';
import { TasksWidget } from 'sql/workbench/parts/dashboard/browser/widgets/tasks/tasksWidget.component';
import { InsightsWidget } from 'sql/workbench/parts/dashboard/browser/widgets/insights/insightsWidget.component';
import { WebviewWidget } from 'sql/workbench/parts/dashboard/electron-browser/widgets/webview/webviewWidget.component';
import { WebviewWidget } from 'sql/workbench/parts/dashboard/browser/widgets/webview/webviewWidget.component';
import { JobStepsViewComponent } from 'sql/workbench/parts/jobManagement/browser/jobStepsView.component';
import { IInstantiationService, _util } from 'vs/platform/instantiation/common/instantiation';
import { ILogService } from 'vs/platform/log/common/log';

View File

@@ -15,8 +15,7 @@ import { CommonServiceInterface } from 'sql/platform/bootstrap/browser/commonSer
import { IDashboardWebview, IDashboardViewService } from 'sql/platform/dashboard/common/dashboardViewService';
import * as azdata from 'azdata';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ElectronWebviewBasedWebview } from 'vs/workbench/contrib/webview/electron-browser/webviewElement';
import { WebviewElement, IWebviewService } from 'vs/workbench/contrib/webview/common/webview';
interface IWebviewWidgetConfig {
id: string;
@@ -31,18 +30,18 @@ const selector = 'webview-widget';
export class WebviewWidget extends DashboardWidget implements IDashboardWidget, OnInit, IDashboardWebview {
private _id: string;
private _webview: ElectronWebviewBasedWebview;
private _webview: WebviewElement;
private _html: string;
private _onMessage = new Emitter<string>();
public readonly onMessage: Event<string> = this._onMessage.event;
private _onMessageDisposable: IDisposable;
constructor(
@Inject(forwardRef(() => CommonServiceInterface)) private _dashboardService: DashboardServiceInterface,
@Inject(WIDGET_CONFIG) protected _config: WidgetConfig,
@Inject(forwardRef(() => ElementRef)) private _el: ElementRef,
@Inject(IDashboardViewService) private dashboardViewService: IDashboardViewService,
@Inject(IInstantiationService) private instantiationService: IInstantiationService,
@Inject(forwardRef(() => CommonServiceInterface)) private readonly _dashboardService: DashboardServiceInterface,
@Inject(WIDGET_CONFIG) protected readonly _config: WidgetConfig,
@Inject(forwardRef(() => ElementRef)) private readonly _el: ElementRef,
@Inject(IDashboardViewService) private readonly dashboardViewService: IDashboardViewService,
@Inject(IWebviewService) private readonly webviewService: IWebviewService
) {
super();
this._id = (_config.widget[selector] as IWebviewWidgetConfig).id;
@@ -99,7 +98,7 @@ export class WebviewWidget extends DashboardWidget implements IDashboardWidget,
this._onMessageDisposable.dispose();
}
this._webview = this.instantiationService.createInstance(ElectronWebviewBasedWebview,
this._webview = this.webviewService.createWebview(this.id,
{},
{
allowScripts: true,

View File

@@ -15,11 +15,11 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
import { localize } from 'vs/nls';
import { IDisposable, toDisposable } from 'vs/base/common/lifecycle';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ElectronWebviewBasedWebview } from 'vs/workbench/contrib/webview/electron-browser/webviewElement';
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
import * as DOM from 'vs/base/browser/dom';
import { ILogService } from 'vs/platform/log/common/log';
import { IWebviewService, WebviewElement } from 'vs/workbench/contrib/webview/common/webview';
import { generateUuid } from 'vs/base/common/uuid';
export class WebViewDialog extends Modal {
@@ -27,7 +27,7 @@ export class WebViewDialog extends Modal {
private _okButton: Button;
private _okLabel: string;
private _closeLabel: string;
private _webview: ElectronWebviewBasedWebview;
private _webview: WebviewElement;
private _html: string;
private _headerTitle: string;
@@ -38,6 +38,8 @@ export class WebViewDialog extends Modal {
private contentDisposables: IDisposable[] = [];
private _onMessage = new Emitter<any>();
private readonly id = generateUuid();
constructor(
@IThemeService themeService: IThemeService,
@IClipboardService clipboardService: IClipboardService,
@@ -45,7 +47,7 @@ export class WebViewDialog extends Modal {
@ITelemetryService telemetryService: ITelemetryService,
@IContextKeyService contextKeyService: IContextKeyService,
@ILogService logService: ILogService,
@IInstantiationService private _instantiationService: IInstantiationService
@IWebviewService private readonly webviewService: IWebviewService
) {
super('', TelemetryKeys.WebView, telemetryService, layoutService, clipboardService, themeService, logService, contextKeyService, { isFlyout: false, hasTitleIcon: true });
this._okLabel = localize('webViewDialog.ok', "OK");
@@ -87,7 +89,7 @@ export class WebViewDialog extends Modal {
protected renderBody(container: HTMLElement) {
this._body = DOM.append(container, DOM.$('div.webview-dialog'));
this._webview = this._instantiationService.createInstance(ElectronWebviewBasedWebview,
this._webview = this.webviewService.createWebview(this.id,
{},
{
allowScripts: true