Skip to content

Commit

Permalink
Showing 27 changed files with 127 additions and 147 deletions.
2 changes: 1 addition & 1 deletion TELEMETRY.md
Original file line number Diff line number Diff line change
@@ -8917,7 +8917,7 @@ No description provided

## Locations Used

[src/webviews/extension-side/webviewHost.ts](https://github.com/microsoft/vscode-jupyter/tree/main/src/webviews/extension-side/webviewHost.ts)
[src/platform/webviews/webviewHost.ts](https://github.com/microsoft/vscode-jupyter/tree/main/src/platform/webviews/webviewHost.ts)
```typescript
protected webViewRendered() {
if (this.webviewInit && !this.webviewInit.resolved) {
36 changes: 36 additions & 0 deletions src/platform/webviews/types.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,42 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

import { Event, Uri } from 'vscode';
import { WebviewViewProvider } from 'vscode';
import { IJupyterSettings } from '../common/types';

export interface IJupyterExtraSettings extends IJupyterSettings {
extraSettings: {
editor: {
cursor: string;
cursorBlink: string;
fontLigatures: boolean;
autoClosingBrackets: string;
autoClosingQuotes: string;
autoSurround: string;
autoIndent: boolean;
scrollBeyondLastLine: boolean;
horizontalScrollbarSize: number;
verticalScrollbarSize: number;
fontSize: number;
fontFamily: string;
};
theme: string;
hasPythonExtension: boolean;
isWeb: boolean;
};
}

type WebViewViewState = {
readonly visible: boolean;
readonly active: boolean;
};
export type WebViewViewChangeEventArgs = { current: WebViewViewState; previous: WebViewViewState };

// Wraps the VS Code WebviewViewProvider. VSC Prefix as we also have our own IWebviewViewProvider
export interface IVSCWebviewViewProvider extends WebviewViewProvider {
readonly viewType: 'jupyterViewVariables';
}

/**
* Handles communications between the WebView (used to render oututs in Notebooks) & extension host.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
'use strict';
import '../../../platform/common/extensions';
import '../common/extensions';

import {
Event,
@@ -11,13 +11,13 @@ import {
WebviewPanel as vscodeWebviewPanel,
WebviewView as vscodeWebviewView
} from 'vscode';
import { IWebview, IWebviewOptions, WebviewMessage } from '../../../platform/common/application/types';
import { traceError } from '../../../platform/logging';
import { Identifiers } from '../../../platform/common/constants';
import { IFileSystem } from '../../../platform/common/platform/types';
import { IDisposableRegistry, IExtensionContext } from '../../../platform/common/types';
import * as localize from '../../../platform/common/utils/localize';
import { joinPath } from '../../../platform/vscode-path/resources';
import { IWebview, IWebviewOptions, WebviewMessage } from '../common/application/types';
import { traceError } from '../logging';
import { Identifiers } from '../common/constants';
import { IFileSystem } from '../common/platform/types';
import { IDisposableRegistry, IExtensionContext } from '../common/types';
import * as localize from '../common/utils/localize';
import { joinPath } from '../vscode-path/resources';

// Wrapper over a vscode webview. To be used with either WebviewPanel or WebviewView
export abstract class Webview implements IWebview {
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@

'use strict';

import '../../platform/common/extensions';
import '../common/extensions';

import {
ConfigurationChangeEvent,
@@ -14,19 +14,18 @@ import {
WebviewView as vscodeWebviewView,
WorkspaceConfiguration
} from 'vscode';
import { IWebview, IWorkspaceService } from '../../platform/common/application/types';
import { isTestExecution } from '../../platform/common/constants';
import { traceInfo } from '../../platform/logging';
import { Resource, IConfigurationService, IDisposable } from '../../platform/common/types';
import { Deferred, createDeferred } from '../../platform/common/utils/async';
import { testOnlyMethod } from '../../platform/common/utils/decorators';
import * as localize from '../../platform/common/utils/localize';
import { StopWatch } from '../../platform/common/utils/stopWatch';
import { InteractiveWindowMessages, SharedMessages } from '../../platform/messageTypes';
import { IWebview, IWorkspaceService } from '../common/application/types';
import { DefaultTheme, isTestExecution, PythonExtension, Telemetry } from '../common/constants';
import { traceInfo } from '../logging';
import { Resource, IConfigurationService, IDisposable } from '../common/types';
import { Deferred, createDeferred } from '../common/utils/async';
import { testOnlyMethod } from '../common/utils/decorators';
import * as localize from '../common/utils/localize';
import { StopWatch } from '../common/utils/stopWatch';
import { InteractiveWindowMessages, SharedMessages } from '../messageTypes';
import { sendTelemetryEvent } from '../../telemetry';
import { DefaultTheme, PythonExtension, Telemetry } from '../webview-side/common/constants';
import { IJupyterExtraSettings } from './types';
import { getOSType, OSType } from '../../platform/common/utils/platform';
import { getOSType, OSType } from '../common/utils/platform';

/* eslint-disable @typescript-eslint/no-explicit-any */

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
'use strict';
import '../../platform/common/extensions';
import '../common/extensions';

import { Uri, ViewColumn, WebviewPanel as vscodeWebviewPanel } from 'vscode';

@@ -12,8 +12,8 @@ import {
IWebviewPanelProvider,
IWorkspaceService,
IWebview
} from '../../platform/common/application/types';
import { IConfigurationService, IDisposable, Resource } from '../../platform/common/types';
} from '../common/application/types';
import { IConfigurationService, IDisposable, Resource } from '../common/types';
import { WebViewViewChangeEventArgs, IJupyterExtraSettings } from './types';

export abstract class WebviewPanelHost<IMapping> extends WebviewHost<IMapping> implements IDisposable {
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
'use strict';
import '../../../platform/common/extensions';

import { inject, injectable } from 'inversify';
import { Uri, ViewColumn, WebviewOptions, WebviewPanel as vscodeWebviewPanel, window } from 'vscode';
import { IFileSystem } from '../../../platform/common/platform/types';
import { IDisposableRegistry, IExtensionContext } from '../../../platform/common/types';
import { IWebviewPanel, IWebviewPanelOptions } from '../../../platform/common/application/types';
import { Webview } from '../webviews/webview';
import { IWebviewPanel, IWebviewPanelOptions, IWebviewPanelProvider } from '../common/application/types';
import { IFileSystem } from '../common/platform/types';
import { IDisposableRegistry, IExtensionContext } from '../common/types';
import * as path from '../vscode-path/path';
import { Webview } from './webview';

export class WebviewPanel extends Webview implements IWebviewPanel {
class WebviewPanel extends Webview implements IWebviewPanel {
private get panel(): vscodeWebviewPanel | undefined {
return this.webviewHost as vscodeWebviewPanel;
}
@@ -110,3 +111,23 @@ export class WebviewPanel extends Webview implements IWebviewPanel {
this.panelOptions.listener.onChangeViewState(this);
}
}

@injectable()
export class WebviewPanelProvider implements IWebviewPanelProvider {
constructor(
@inject(IDisposableRegistry) private readonly disposableRegistry: IDisposableRegistry,
@inject(IFileSystem) private readonly fs: IFileSystem,
@inject(IExtensionContext) private readonly context: IExtensionContext
) {}

// eslint-disable-next-line @typescript-eslint/no-explicit-any
public async create(options: IWebviewPanelOptions): Promise<IWebviewPanel> {
// Allow loading resources from the `<extension folder>/tmp` folder when in webiviews.
// Used by widgets to place files that are not otherwise accessible.
const additionalRootPaths = [Uri.file(path.join(this.context.extensionPath, 'tmp'))];
if (Array.isArray(options.additionalPaths)) {
additionalRootPaths.push(...options.additionalPaths);
}
return new WebviewPanel(this.fs, this.disposableRegistry, this.context, options, additionalRootPaths);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
'use strict';
import '../../platform/common/extensions';
import '../common/extensions';

import { Uri, WebviewView as vscodeWebviewView } from 'vscode';

@@ -12,8 +12,8 @@ import {
IWorkspaceService,
IWebviewViewProvider,
IWebview
} from '../../platform/common/application/types';
import { IConfigurationService, IDisposable, Resource } from '../../platform/common/types';
} from '../common/application/types';
import { IConfigurationService, IDisposable, Resource } from '../common/types';
import { IJupyterExtraSettings } from './types';

export abstract class WebviewViewHost<IMapping> extends WebviewHost<IMapping> implements IDisposable {
Original file line number Diff line number Diff line change
@@ -2,13 +2,14 @@
// Licensed under the MIT License.
'use strict';

import { inject, injectable } from 'inversify';
import { Event, EventEmitter, Uri, WebviewOptions, WebviewView as vscodeWebviewView } from 'vscode';
import { IWebviewView, IWebviewViewOptions } from '../../../platform/common/application/types';
import { IFileSystem } from '../../../platform/common/platform/types';
import { IDisposableRegistry, IExtensionContext } from '../../../platform/common/types';
import { Webview } from '../webviews/webview';
import { IWebviewView, IWebviewViewOptions, IWebviewViewProvider } from '../common/application/types';
import { IFileSystem } from '../common/platform/types';
import { IDisposableRegistry, IExtensionContext } from '../common/types';
import { Webview } from './webview';

export class WebviewView extends Webview implements IWebviewView {
class WebviewView extends Webview implements IWebviewView {
public get visible(): boolean {
if (!this.webviewHost) {
return false;
@@ -60,3 +61,16 @@ export class WebviewView extends Webview implements IWebviewView {
this._onDidChangeVisibility.fire();
}
}

@injectable()
export class WebviewViewProvider implements IWebviewViewProvider {
constructor(
@inject(IDisposableRegistry) private readonly disposableRegistry: IDisposableRegistry,
@inject(IFileSystem) private readonly fs: IFileSystem,
@inject(IExtensionContext) private readonly context: IExtensionContext
) {}

public async create(options: IWebviewViewOptions): Promise<IWebviewView> {
return new WebviewView(this.fs, this.disposableRegistry, this.context, options);
}
}
4 changes: 2 additions & 2 deletions src/standalone/serviceRegistry.node.ts
Original file line number Diff line number Diff line change
@@ -12,8 +12,8 @@ import { IServiceManager } from '../platform/ioc/types';
import { INotebookWatcher, IVariableViewProvider } from '../webviews/extension-side/variablesView/types';
import { VariableViewActivationService } from '../webviews/extension-side/variablesView/variableViewActivationService';
import { VariableViewProvider } from '../webviews/extension-side/variablesView/variableViewProvider';
import { WebviewPanelProvider } from '../webviews/extension-side/webviewPanels/webviewPanelProvider';
import { WebviewViewProvider } from '../webviews/extension-side/webviewViews/webviewViewProvider';
import { WebviewPanelProvider } from '../platform/webviews/webviewPanelProvider';
import { WebviewViewProvider } from '../platform/webviews/webviewViewProvider';
import { JupyterVariableDataProvider } from '../webviews/extension-side/dataviewer/jupyterVariableDataProvider';
import { JupyterVariableDataProviderFactory } from '../webviews/extension-side/dataviewer/jupyterVariableDataProviderFactory';
import {
4 changes: 2 additions & 2 deletions src/standalone/serviceRegistry.web.ts
Original file line number Diff line number Diff line change
@@ -4,8 +4,8 @@

import { IWebviewViewProvider, IWebviewPanelProvider } from '../platform/common/application/types';
import { IServiceManager } from '../platform/ioc/types';
import { WebviewViewProvider } from '../webviews/extension-side/webviewViews/webviewViewProvider';
import { WebviewPanelProvider } from '../webviews/extension-side/webviewPanels/webviewPanelProvider';
import { WebviewViewProvider } from '../platform/webviews/webviewViewProvider';
import { WebviewPanelProvider } from '../platform/webviews/webviewPanelProvider';
import { IExtensionActivationManager, IExtensionSingleActivationService } from '../platform/activation/types';
import { VariableViewActivationService } from '../webviews/extension-side/variablesView/variableViewActivationService';
import { INotebookWatcher, IVariableViewProvider } from '../webviews/extension-side/variablesView/types';
2 changes: 1 addition & 1 deletion src/test/datascience/data-viewing/dataViewer.unit.test.ts
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@ import {
IWebviewPanelProvider,
IWorkspaceService
} from '../../../platform/common/application/types';
import { WebviewPanelProvider } from '../../../webviews/extension-side/webviewPanels/webviewPanelProvider';
import { WebviewPanelProvider } from '../../../platform/webviews/webviewPanelProvider';
import { WorkspaceService } from '../../../platform/common/application/workspace.node';
import { JupyterSettings } from '../../../platform/common/configSettings';
import { ConfigurationService } from '../../../platform/common/configuration/service.node';
4 changes: 2 additions & 2 deletions src/webviews/extension-side/dataviewer/dataViewer.ts
Original file line number Diff line number Diff line change
@@ -40,8 +40,8 @@ import {
import * as localize from '../../../platform/common/utils/localize';
import { StopWatch } from '../../../platform/common/utils/stopWatch';
import { Telemetry } from '../../webview-side/common/constants';
import { WebViewViewChangeEventArgs } from '../types';
import { WebviewPanelHost } from '../webviewPanelHost';
import { WebViewViewChangeEventArgs } from '../../../platform/webviews/types';
import { WebviewPanelHost } from '../../../platform/webviews/webviewPanelHost';
import { noop } from '../../../platform/common/utils/misc';
import { joinPath } from '../../../platform/vscode-path/resources';
import { IDataScienceErrorHandler } from '../../../kernels/errors/types';
2 changes: 1 addition & 1 deletion src/webviews/extension-side/plotting/plotViewer.node.ts
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@ import { IConfigurationService, IDisposable } from '../../../platform/common/typ
import { IFileSystemNode } from '../../../platform/common/platform/types.node';
import * as localize from '../../../platform/common/utils/localize';
import { EXTENSION_ROOT_DIR } from '../../../platform/constants.node';
import { WebviewPanelHost } from '../webviewPanelHost';
import { WebviewPanelHost } from '../../../platform/webviews/webviewPanelHost';
import { joinPath } from '../../../platform/vscode-path/resources';
import { noop } from '../../../platform/common/utils/misc';

38 changes: 0 additions & 38 deletions src/webviews/extension-side/types.ts

This file was deleted.

2 changes: 1 addition & 1 deletion src/webviews/extension-side/variablesView/types.ts
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@ import {
} from '../../../platform/messageTypes';
import { IKernel } from '../../../kernels/types';
import { IJupyterVariablesRequest, IJupyterVariablesResponse } from '../../../kernels/variables/types';
import { IVSCWebviewViewProvider } from '../types';
import { IVSCWebviewViewProvider } from '../../../platform/webviews/types';

// Mapping of Message to payload that our VariableViewPanel needs to support
export class IVariableViewPanelMapping {
2 changes: 1 addition & 1 deletion src/webviews/extension-side/variablesView/variableView.ts
Original file line number Diff line number Diff line change
@@ -33,7 +33,7 @@ import * as localize from '../../../platform/common/utils/localize';
import { Telemetry } from '../../webview-side/common/constants';
import { DataViewerChecker } from '../dataviewer/dataViewerChecker';
import { IJupyterVariableDataProviderFactory, IDataViewerFactory, IDataViewer } from '../dataviewer/types';
import { WebviewViewHost } from '../webviewViewHost';
import { WebviewViewHost } from '../../../platform/webviews/webviewViewHost';
import { swallowExceptions } from '../../../platform/common/utils/decorators';
import { noop } from '../../../platform/common/utils/misc';

30 changes: 0 additions & 30 deletions src/webviews/extension-side/webviewPanels/webviewPanelProvider.ts

This file was deleted.

Loading

0 comments on commit 9bb8955

Please sign in to comment.