提交 efec95c7 编写于 作者: R rebornix

allow workspace folder in notebook webview.

上级 3e9b7f50
...@@ -364,7 +364,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor ...@@ -364,7 +364,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
} }
async setModel(textModel: NotebookTextModel, viewState: INotebookEditorViewState | undefined, options: EditorOptions | undefined): Promise<void> { async setModel(textModel: NotebookTextModel, viewState: INotebookEditorViewState | undefined, options: EditorOptions | undefined): Promise<void> {
if (this.notebookViewModel === undefined || !this.notebookViewModel.equal(textModel) || this.webview === null) { if (this.notebookViewModel === undefined || !this.notebookViewModel.equal(textModel)) {
this.detachModel(); this.detachModel();
await this.attachModel(textModel, viewState); await this.attachModel(textModel, viewState);
} }
...@@ -454,8 +454,8 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor ...@@ -454,8 +454,8 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
DOM.toggleClass(this.getDomNode(), 'notebook-editor-editable', !!this.viewModel!.metadata?.editable); DOM.toggleClass(this.getDomNode(), 'notebook-editor-editable', !!this.viewModel!.metadata?.editable);
} }
private createWebview(id: string) { private createWebview(id: string, document: URI) {
this.webview = this.instantiationService.createInstance(BackLayerWebView, this, id); this.webview = this.instantiationService.createInstance(BackLayerWebView, this, id, document);
this.webview.webview.onDidBlur(() => this.updateEditorFocus()); this.webview.webview.onDidBlur(() => this.updateEditorFocus());
this.webview.webview.onDidFocus(() => this.updateEditorFocus()); this.webview.webview.onDidFocus(() => this.updateEditorFocus());
this.localStore.add(this.webview.onMessage(message => { this.localStore.add(this.webview.onMessage(message => {
...@@ -467,7 +467,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor ...@@ -467,7 +467,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
} }
private async attachModel(textModel: NotebookTextModel, viewState: INotebookEditorViewState | undefined) { private async attachModel(textModel: NotebookTextModel, viewState: INotebookEditorViewState | undefined) {
this.createWebview(this.getId()); this.createWebview(this.getId(), textModel.uri);
await this.webview!.waitForInitialization(); await this.webview!.waitForInitialization();
this.eventDispatcher = new NotebookEventDispatcher(); this.eventDispatcher = new NotebookEventDispatcher();
......
...@@ -21,6 +21,8 @@ import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookS ...@@ -21,6 +21,8 @@ import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookS
import { IWebviewService, WebviewElement } from 'vs/workbench/contrib/webview/browser/webview'; import { IWebviewService, WebviewElement } from 'vs/workbench/contrib/webview/browser/webview';
import { asWebviewUri } from 'vs/workbench/contrib/webview/common/webviewUri'; import { asWebviewUri } from 'vs/workbench/contrib/webview/common/webviewUri';
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
import { dirname } from 'vs/base/common/resources';
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
export interface IDimensionMessage { export interface IDimensionMessage {
__vscode_notebook_message: boolean; __vscode_notebook_message: boolean;
...@@ -144,10 +146,12 @@ export class BackLayerWebView extends Disposable { ...@@ -144,10 +146,12 @@ export class BackLayerWebView extends Disposable {
constructor( constructor(
public notebookEditor: INotebookEditor, public notebookEditor: INotebookEditor,
public id: string, public id: string,
public documentUri: URI,
@IWebviewService readonly webviewService: IWebviewService, @IWebviewService readonly webviewService: IWebviewService,
@IOpenerService readonly openerService: IOpenerService, @IOpenerService readonly openerService: IOpenerService,
@INotebookService private readonly notebookService: INotebookService, @INotebookService private readonly notebookService: INotebookService,
@IEnvironmentService private readonly environmentService: IEnvironmentService, @IEnvironmentService private readonly environmentService: IEnvironmentService,
@IWorkspaceContextService private readonly contextService: IWorkspaceContextService,
@IWorkbenchEnvironmentService private readonly workbenchEnvironmentService: IWorkbenchEnvironmentService, @IWorkbenchEnvironmentService private readonly workbenchEnvironmentService: IWorkbenchEnvironmentService,
) { ) {
super(); super();
...@@ -168,9 +172,11 @@ export class BackLayerWebView extends Disposable { ...@@ -168,9 +172,11 @@ export class BackLayerWebView extends Disposable {
resolveFunc = resolve; resolveFunc = resolve;
}); });
const baseUrl = asWebviewUri(this.workbenchEnvironmentService, this.id, dirname(documentUri));
if (!isWeb) { if (!isWeb) {
coreDependencies = `<script src="${loader}"></script>`; coreDependencies = `<script src="${loader}"></script>`;
const htmlContent = this.generateContent(8, coreDependencies); const htmlContent = this.generateContent(8, coreDependencies, baseUrl.toString());
this.initialize(htmlContent); this.initialize(htmlContent);
resolveFunc!(); resolveFunc!();
} else { } else {
...@@ -186,18 +192,20 @@ export class BackLayerWebView extends Disposable { ...@@ -186,18 +192,20 @@ export class BackLayerWebView extends Disposable {
${loaderJs} ${loaderJs}
</script> </script>
`; `;
const htmlContent = this.generateContent(8, coreDependencies);
const htmlContent = this.generateContent(8, coreDependencies, baseUrl.toString());
this.initialize(htmlContent); this.initialize(htmlContent);
resolveFunc!(); resolveFunc!();
}); });
} }
} }
generateContent(outputNodePadding: number, coreDependencies: string) { generateContent(outputNodePadding: number, coreDependencies: string, baseUrl: string) {
return html` return html`
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<base url="${baseUrl}/"/>
<style> <style>
#container > div > div { #container > div > div {
width: 100%; width: 100%;
...@@ -565,7 +573,9 @@ ${loaderJs} ...@@ -565,7 +573,9 @@ ${loaderJs}
private _createInset(webviewService: IWebviewService, content: string) { private _createInset(webviewService: IWebviewService, content: string) {
const rootPath = URI.file(path.dirname(getPathFromAmdModule(require, ''))); const rootPath = URI.file(path.dirname(getPathFromAmdModule(require, '')));
this.localResourceRootsCache = [...this.notebookService.getNotebookProviderResourceRoots(), rootPath]; const workspaceFolders = this.contextService.getWorkspace().folders.map(x => x.uri);
this.localResourceRootsCache = [...this.notebookService.getNotebookProviderResourceRoots(), ...workspaceFolders, rootPath];
const webview = webviewService.createWebviewElement(this.id, { const webview = webviewService.createWebviewElement(this.id, {
enableFindWidget: false, enableFindWidget: false,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册