mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-24 02:28:34 +01:00
Update notebook cells
This commit is contained in:
@@ -9,7 +9,6 @@ import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { URI, UriComponents } from 'vs/base/common/uri';
|
||||
import { INotebookService, IMainNotebookController } from 'vs/workbench/contrib/notebook/browser/notebookService';
|
||||
import { Emitter, Event } from 'vs/base/common/event';
|
||||
import { IMarkdownString } from 'vs/base/common/htmlContent';
|
||||
import { ICell, IOutput, INotebook, INotebookMimeTypeSelector } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
|
||||
export class MainThreadCell implements ICell {
|
||||
@@ -139,7 +138,7 @@ export class MainThreadNotebookDocument extends Disposable implements INotebook
|
||||
}
|
||||
|
||||
async createRawCell(viewType: string, uri: URI, index: number, language: string, type: 'markdown' | 'code'): Promise<MainThreadCell | undefined> {
|
||||
let cell = await this._proxy.$createRawCell(viewType, uri, index, language, type);
|
||||
let cell = await this._proxy.$createEmptyCell(viewType, uri, index, language, type);
|
||||
if (cell) {
|
||||
let mainCell = new MainThreadCell(cell.handle, cell.source, cell.language, cell.cell_type, cell.outputs);
|
||||
this._mapping.set(cell.handle, mainCell);
|
||||
@@ -231,8 +230,6 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
|
||||
controller.createNotebookDocument(handle, viewType, resource);
|
||||
}
|
||||
|
||||
// let document = new MainThreadNotebookDocument(this._proxy, handle, viewType, URI.revive(resource));
|
||||
// this._documents.set(handle, document);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -244,15 +241,6 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
|
||||
}
|
||||
}
|
||||
|
||||
async $updateNotebookCell(viewType: string, resource: UriComponents, cell: ICell, renderers: number[]): Promise<void> {
|
||||
let controller = this._notebookProviders.get(viewType);
|
||||
|
||||
if (controller) {
|
||||
controller.updateNotebookCell(resource, cell, renderers);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async $updateNotebookLanguages(viewType: string, resource: UriComponents, languages: string[]): Promise<void> {
|
||||
let controller = this._notebookProviders.get(viewType);
|
||||
|
||||
@@ -261,21 +249,13 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
|
||||
}
|
||||
}
|
||||
|
||||
// async $updateNotebook(viewType: string, resource: UriComponents, notebook: INotebookDto): Promise<void> {
|
||||
// let controller = this._notebookProviders.get(viewType);
|
||||
|
||||
// if (controller) {
|
||||
// controller.updateNotebook(resource, notebook);
|
||||
// }
|
||||
// }
|
||||
|
||||
async resolveNotebook(viewType: string, uri: URI): Promise<number | undefined> {
|
||||
let handle = await this._proxy.$resolveNotebook(viewType, uri);
|
||||
return handle;
|
||||
}
|
||||
|
||||
executeNotebook(viewType: string, uri: URI): Promise<void> {
|
||||
return this._proxy.$executeNotebook(viewType, uri);
|
||||
async executeNotebook(viewType: string, uri: URI): Promise<void> {
|
||||
return this._proxy.$executeNotebook(viewType, uri, undefined);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -317,63 +297,40 @@ export class MainThreadNotebookController implements IMainNotebookController {
|
||||
}
|
||||
|
||||
updateNotebook(resource: UriComponents, notebook: INotebook): void {
|
||||
let mainthreadNotebook = this._mapping.get(URI.from(resource).toString());
|
||||
|
||||
if (mainthreadNotebook) {
|
||||
mainthreadNotebook.updateCells(notebook.cells);
|
||||
}
|
||||
let document = this._mapping.get(URI.from(resource).toString());
|
||||
document?.updateCells(notebook.cells);
|
||||
}
|
||||
|
||||
updateLanguages(resource: UriComponents, languages: string[]) {
|
||||
let document = this._mapping.get(URI.from(resource).toString());
|
||||
|
||||
if (document) {
|
||||
document.updateLanguages(languages);
|
||||
}
|
||||
document?.updateLanguages(languages);
|
||||
}
|
||||
|
||||
updateNotebookCells(resource: UriComponents, cells: ICell[], renderers: number[]): void {
|
||||
let document = this._mapping.get(URI.from(resource).toString());
|
||||
|
||||
if (document) {
|
||||
document.updateRenderers(renderers);
|
||||
document.updateCells(cells);
|
||||
}
|
||||
document?.updateRenderers(renderers);
|
||||
document?.updateCells(cells);
|
||||
}
|
||||
|
||||
updateNotebookCell(resource: UriComponents, cell: ICell, renderers: number[]): void {
|
||||
let document = this._mapping.get(URI.from(resource).toString());
|
||||
|
||||
if (document) {
|
||||
document.updateRenderers(renderers);
|
||||
document.updateCell(cell);
|
||||
}
|
||||
document?.updateRenderers(renderers);
|
||||
document?.updateCell(cell);
|
||||
}
|
||||
|
||||
updateNotebookRenderers(resource: UriComponents, renderers: number[]): void {
|
||||
let document = this._mapping.get(URI.from(resource).toString());
|
||||
|
||||
if (document) {
|
||||
document.updateRenderers(renderers);
|
||||
}
|
||||
document?.updateRenderers(renderers);
|
||||
}
|
||||
|
||||
updateNotebookActiveCell(uri: URI, cellHandle: number): void {
|
||||
let mainthreadNotebook = this._mapping.get(URI.from(uri).toString());
|
||||
|
||||
if (mainthreadNotebook) {
|
||||
mainthreadNotebook.updateActiveCell(cellHandle);
|
||||
}
|
||||
mainthreadNotebook?.updateActiveCell(cellHandle);
|
||||
}
|
||||
|
||||
async createRawCell(uri: URI, index: number, language: string, type: 'markdown' | 'code'): Promise<ICell | undefined> {
|
||||
let mainthreadNotebook = this._mapping.get(URI.from(uri).toString());
|
||||
|
||||
if (mainthreadNotebook) {
|
||||
return mainthreadNotebook.createRawCell(this._viewType, uri, index, language, type);
|
||||
}
|
||||
|
||||
return;
|
||||
return mainthreadNotebook?.createRawCell(this._viewType, uri, index, language, type);
|
||||
}
|
||||
|
||||
async deleteCell(uri: URI, index: number): Promise<boolean> {
|
||||
@@ -390,23 +347,25 @@ export class MainThreadNotebookController implements IMainNotebookController {
|
||||
let mainthreadNotebook = this._mapping.get(URI.from(uri).toString());
|
||||
|
||||
if (mainthreadNotebook && mainthreadNotebook.activeCell) {
|
||||
this._proxy.$executeNotebookCell(this._viewType, uri, mainthreadNotebook.activeCell.handle);
|
||||
this._proxy.$executeNotebook(this._viewType, uri, mainthreadNotebook.activeCell.handle);
|
||||
}
|
||||
}
|
||||
|
||||
async latexRenderer(value: string): Promise<IMarkdownString | undefined> {
|
||||
return this._proxy.$latexRenderer(this._viewType, value);
|
||||
}
|
||||
// async latexRenderer(value: string): Promise<IMarkdownString | undefined> {
|
||||
// return this._proxy.$latexRenderer(this._viewType, value);
|
||||
// }
|
||||
|
||||
async destoryNotebookDocument(notebook: INotebook): Promise<void> {
|
||||
let mainthreadNotebook = this._mapping.get(URI.from(notebook.uri).toString());
|
||||
let document = this._mapping.get(URI.from(notebook.uri).toString());
|
||||
|
||||
if (mainthreadNotebook) {
|
||||
let removeFromExtHost = await this._proxy.$destoryNotebookDocument(this._viewType, notebook.uri);
|
||||
if (removeFromExtHost) {
|
||||
mainthreadNotebook.dispose();
|
||||
this._mapping.delete(URI.from(notebook.uri).toString());
|
||||
}
|
||||
if (!document) {
|
||||
return;
|
||||
}
|
||||
|
||||
let removeFromExtHost = await this._proxy.$destoryNotebookDocument(this._viewType, notebook.uri);
|
||||
if (removeFromExtHost) {
|
||||
document.dispose();
|
||||
this._mapping.delete(URI.from(notebook.uri).toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -649,9 +649,7 @@ export interface MainThreadNotebookShape extends IDisposable {
|
||||
$registerNotebookRenderer(extension: NotebookExtensionDescription, selectors: INotebookMimeTypeSelector, handle: number, preloads: UriComponents[]): Promise<void>;
|
||||
$unregisterNotebookRenderer(handle: number): Promise<void>;
|
||||
$createNotebookDocument(handle: number, viewType: string, resource: UriComponents): Promise<void>;
|
||||
// $updateNotebook(viewType: string, resource: UriComponents, notebook: INotebookDto): Promise<void>;
|
||||
$updateNotebookCells(viewType: string, resource: UriComponents, cells: ICellDto[], renderers: number[]): Promise<void>;
|
||||
$updateNotebookCell(viewType: string, resource: UriComponents, cell: ICellDto, renderers: number[]): Promise<void>;
|
||||
$updateNotebookLanguages(viewType: string, resource: UriComponents, languages: string[]): Promise<void>;
|
||||
}
|
||||
|
||||
@@ -1475,10 +1473,9 @@ export interface ExtHostCommentsShape {
|
||||
|
||||
export interface ExtHostNotebookShape {
|
||||
$resolveNotebook(viewType: string, uri: UriComponents): Promise<number | undefined>;
|
||||
$executeNotebook(viewType: string, uri: UriComponents): Promise<void>;
|
||||
$executeNotebookCell(viewType: string, uri: UriComponents, cellHandle: number): Promise<void>;
|
||||
$latexRenderer(viewType: string, value: string): Promise<IMarkdownString | undefined>;
|
||||
$createRawCell(viewType: string, uri: UriComponents, index: number, language: string, type: 'markdown' | 'code'): Promise<ICellDto | undefined>;
|
||||
$executeNotebook(viewType: string, uri: UriComponents, cellHandle: number | undefined): Promise<void>;
|
||||
// $latexRenderer(viewType: string, value: string): Promise<IMarkdownString | undefined>;
|
||||
$createEmptyCell(viewType: string, uri: UriComponents, index: number, language: string, type: 'markdown' | 'code'): Promise<ICellDto | undefined>;
|
||||
$deleteCell(viewType: string, uri: UriComponents, index: number): Promise<boolean>;
|
||||
$saveNotebook(viewType: string, uri: UriComponents): Promise<boolean>;
|
||||
$updateActiveEditor(viewType: string, uri: UriComponents): Promise<void>;
|
||||
|
||||
@@ -117,14 +117,14 @@ export class ExtHostNotebookDocument implements vscode.NotebookDocument {
|
||||
});
|
||||
}
|
||||
|
||||
this._proxy.$updateNotebookCell(this.viewType, this.uri, {
|
||||
this._proxy.$updateNotebookCells(this.viewType, this.uri, [{
|
||||
handle: cell.handle,
|
||||
source: cell.source,
|
||||
language: cell.language,
|
||||
cell_type: cell.cell_type,
|
||||
outputs: outputs,
|
||||
isDirty: false
|
||||
}, Array.from(renderers));
|
||||
}], Array.from(renderers));
|
||||
}));
|
||||
});
|
||||
}
|
||||
@@ -140,6 +140,16 @@ export class ExtHostNotebookDocument implements vscode.NotebookDocument {
|
||||
this._proxy.$updateNotebookLanguages(this.viewType, this.uri, this._languages);
|
||||
}
|
||||
|
||||
private _displayOrder: vscode.GlobPattern[] = [];
|
||||
|
||||
get displayOrder() {
|
||||
return this._displayOrder;
|
||||
}
|
||||
|
||||
set displayOrder(newOrder: vscode.GlobPattern[]) {
|
||||
this._displayOrder = newOrder;
|
||||
}
|
||||
|
||||
constructor(
|
||||
private readonly _proxy: MainThreadNotebookShape,
|
||||
public viewType: string,
|
||||
@@ -184,7 +194,7 @@ export class ExtHostNotebookDocument implements vscode.NotebookDocument {
|
||||
return await this._proxy.$updateNotebookCells(this.viewType, this.uri, cells, Array.from(renderers));
|
||||
}
|
||||
|
||||
insertRawCell(index: number, cell: ExtHostCell) {
|
||||
insertCell(index: number, cell: ExtHostCell) {
|
||||
this.cells.splice(index, 0, cell);
|
||||
|
||||
if (!this._cellDisposableMapping.has(cell.handle)) {
|
||||
@@ -209,14 +219,14 @@ export class ExtHostNotebookDocument implements vscode.NotebookDocument {
|
||||
});
|
||||
}
|
||||
|
||||
this._proxy.$updateNotebookCell(this.viewType, this.uri, {
|
||||
this._proxy.$updateNotebookCells(this.viewType, this.uri, [{
|
||||
handle: cell.handle,
|
||||
source: cell.source,
|
||||
language: cell.language,
|
||||
cell_type: cell.cell_type,
|
||||
outputs: outputs,
|
||||
isDirty: false
|
||||
}, Array.from(renderers));
|
||||
}], Array.from(renderers));
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -233,7 +243,7 @@ export class ExtHostNotebookDocument implements vscode.NotebookDocument {
|
||||
return true;
|
||||
}
|
||||
|
||||
getActiveCell(cellHandle: number) {
|
||||
getCell(cellHandle: number) {
|
||||
return this.cells.find(cell => cell.handle === cellHandle);
|
||||
}
|
||||
|
||||
@@ -448,11 +458,9 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
|
||||
|
||||
let editor = new ExtHostNotebookEditor(
|
||||
viewType,
|
||||
// this._proxy,
|
||||
`${ExtHostNotebookController._handlePool++}`,
|
||||
URI.revive(uri),
|
||||
this._documents.get(URI.revive(uri).toString())!,
|
||||
// this._documentsProxy,
|
||||
this._documentsAndEditors
|
||||
);
|
||||
|
||||
@@ -465,41 +473,35 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
|
||||
async $executeNotebook(viewType: string, uri: UriComponents): Promise<void> {
|
||||
async $executeNotebook(viewType: string, uri: UriComponents, cellHandle: number | undefined): Promise<void> {
|
||||
let provider = this._notebookProviders.get(viewType);
|
||||
|
||||
if (provider) {
|
||||
let document = this._documents.get(URI.revive(uri).toString());
|
||||
|
||||
return provider.provider.executeCell(document!, undefined);
|
||||
}
|
||||
}
|
||||
|
||||
async $executeNotebookCell(viewType: string, uri: UriComponents, cellHandle: number): Promise<void> {
|
||||
let provider = this._notebookProviders.get(viewType);
|
||||
|
||||
if (provider) {
|
||||
let document = this._documents.get(URI.revive(uri).toString());
|
||||
let cell = document?.getActiveCell(cellHandle);
|
||||
|
||||
if (cell) {
|
||||
return provider.provider.executeCell(document!, cell!);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async $latexRenderer(viewType: string, value: string): Promise<IMarkdownString | undefined> {
|
||||
let provider = this._notebookProviders.get(viewType);
|
||||
|
||||
if (provider && provider.provider.latexRenderer) {
|
||||
let res = await provider.provider.latexRenderer(value);
|
||||
return extHostTypeConverter.MarkdownString.from(res);
|
||||
if (!provider) {
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
let document = this._documents.get(URI.revive(uri).toString());
|
||||
|
||||
if (!document) {
|
||||
return;
|
||||
}
|
||||
|
||||
let cell = cellHandle !== undefined ? document.getCell(cellHandle) : undefined;
|
||||
return provider.provider.executeCell(document!, cell);
|
||||
}
|
||||
|
||||
async $createRawCell(viewType: string, uri: URI, index: number, language: string, type: 'markdown' | 'code'): Promise<ICell | undefined> {
|
||||
// async $latexRenderer(viewType: string, value: string): Promise<IMarkdownString | undefined> {
|
||||
// let provider = this._notebookProviders.get(viewType);
|
||||
|
||||
// if (provider && provider.provider.latexRenderer) {
|
||||
// let res = await provider.provider.latexRenderer(value);
|
||||
// return extHostTypeConverter.MarkdownString.from(res);
|
||||
// }
|
||||
|
||||
// return;
|
||||
// }
|
||||
|
||||
async $createEmptyCell(viewType: string, uri: URI, index: number, language: string, type: 'markdown' | 'code'): Promise<ICell | undefined> {
|
||||
let provider = this._notebookProviders.get(viewType);
|
||||
|
||||
if (provider) {
|
||||
@@ -507,7 +509,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
|
||||
let document = this._documents.get(URI.revive(uri).toString());
|
||||
|
||||
let rawCell = editor?.createCell('', language, type, []) as ExtHostCell;
|
||||
document?.insertRawCell(index, rawCell!);
|
||||
document?.insertCell(index, rawCell!);
|
||||
return {
|
||||
handle: rawCell.handle,
|
||||
source: rawCell.source,
|
||||
|
||||
Reference in New Issue
Block a user