mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-23 01:58:53 +01:00
Update preload scripts for notebook renderer
This commit is contained in:
@@ -68,6 +68,7 @@ export class MainThreadNotebookDocument extends Disposable implements INotebook
|
||||
public cells: MainThreadCell[];
|
||||
public activeCell: MainThreadCell | undefined;
|
||||
public languages: string[] = [];
|
||||
public renderers = new Set<number>();
|
||||
|
||||
private _isDirty: boolean = false;
|
||||
|
||||
@@ -94,6 +95,12 @@ export class MainThreadNotebookDocument extends Disposable implements INotebook
|
||||
this.languages = languages;
|
||||
}
|
||||
|
||||
updateRenderers(renderers: number[]) {
|
||||
renderers.forEach(render => {
|
||||
this.renderers.add(render);
|
||||
});
|
||||
}
|
||||
|
||||
updateCell(cell: ICell) {
|
||||
let mcell = this._mapping.get(cell.handle);
|
||||
|
||||
@@ -183,7 +190,6 @@ export class MainThreadNotebookDocument extends Disposable implements INotebook
|
||||
@extHostNamedCustomer(MainContext.MainThreadNotebook)
|
||||
export class MainThreadNotebooks extends Disposable implements MainThreadNotebookShape {
|
||||
private readonly _notebookProviders = new Map<string, MainThreadNotebookController>();
|
||||
private readonly _renderers = new Map<number, MainThreadNotebookController>();
|
||||
private readonly _proxy: ExtHostNotebookShape;
|
||||
|
||||
constructor(
|
||||
@@ -197,12 +203,12 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
|
||||
}));
|
||||
}
|
||||
|
||||
$registerNotebookRenderer(extension: NotebookExtensionDescription, selectors: INotebookMimeTypeSelector, handle: number): Promise<void> {
|
||||
throw new Error('Method not implemented.');
|
||||
async $registerNotebookRenderer(extension: NotebookExtensionDescription, selectors: INotebookMimeTypeSelector, handle: number, preloads: UriComponents[]): Promise<void> {
|
||||
this._notebookService.registerNotebookRenderer(handle, extension, selectors, preloads.map(uri => URI.revive(uri)));
|
||||
}
|
||||
|
||||
$unregisterNotebookRenderer(handle: number): Promise<void> {
|
||||
throw new Error('Method not implemented.');
|
||||
async $unregisterNotebookRenderer(handle: number): Promise<void> {
|
||||
this._notebookService.unregisterNotebookRenderer(handle);
|
||||
}
|
||||
|
||||
async $registerNotebookProvider(extension: NotebookExtensionDescription, viewType: string): Promise<void> {
|
||||
@@ -230,19 +236,19 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
|
||||
return;
|
||||
}
|
||||
|
||||
async $updateNotebookCells(viewType: string, resource: UriComponents, cells: ICell[]): Promise<void> {
|
||||
async $updateNotebookCells(viewType: string, resource: UriComponents, cells: ICell[], renderers: number[]): Promise<void> {
|
||||
let controller = this._notebookProviders.get(viewType);
|
||||
|
||||
if (controller) {
|
||||
controller.updateNotebookCells(resource, cells);
|
||||
controller.updateNotebookCells(resource, cells, renderers);
|
||||
}
|
||||
}
|
||||
|
||||
async $updateNotebookCell(viewType: string, resource: UriComponents, cell: ICell): Promise<void> {
|
||||
async $updateNotebookCell(viewType: string, resource: UriComponents, cell: ICell, renderers: number[]): Promise<void> {
|
||||
let controller = this._notebookProviders.get(viewType);
|
||||
|
||||
if (controller) {
|
||||
controller.updateNotebookCell(resource, cell);
|
||||
controller.updateNotebookCell(resource, cell, renderers);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -326,22 +332,32 @@ export class MainThreadNotebookController implements IMainNotebookController {
|
||||
}
|
||||
}
|
||||
|
||||
updateNotebookCells(resource: UriComponents, cells: ICell[]): void {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
updateNotebookCell(resource: UriComponents, cell: ICell): void {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
updateNotebookRenderers(resource: UriComponents, renderers: number[]): void {
|
||||
let document = this._mapping.get(URI.from(resource).toString());
|
||||
|
||||
if (document) {
|
||||
document.updateRenderers(renderers);
|
||||
}
|
||||
}
|
||||
|
||||
updateNotebookActiveCell(uri: URI, cellHandle: number): void {
|
||||
let mainthreadNotebook = this._mapping.get(URI.from(uri).toString());
|
||||
|
||||
|
||||
@@ -628,12 +628,12 @@ export interface ExtHostWebviewsShape {
|
||||
export interface MainThreadNotebookShape extends IDisposable {
|
||||
$registerNotebookProvider(extension: NotebookExtensionDescription, viewType: string): Promise<void>;
|
||||
$unregisterNotebookProvider(viewType: string): Promise<void>;
|
||||
$registerNotebookRenderer(extension: NotebookExtensionDescription, selectors: INotebookMimeTypeSelector, handle: number): Promise<void>;
|
||||
$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: INotebook): Promise<void>;
|
||||
$updateNotebookCells(viewType: string, resource: UriComponents, cells: ICell[]): Promise<void>;
|
||||
$updateNotebookCell(viewType: string, resource: UriComponents, cell: ICell): Promise<void>;
|
||||
$updateNotebookCells(viewType: string, resource: UriComponents, cells: ICell[], renderers: number[]): Promise<void>;
|
||||
$updateNotebookCell(viewType: string, resource: UriComponents, cell: ICell, renderers: number[]): Promise<void>;
|
||||
$updateNotebookLanguages(viewType: string, resource: UriComponents, languages: string[]): Promise<void>;
|
||||
}
|
||||
|
||||
|
||||
@@ -90,12 +90,14 @@ export class ExtHostNotebookDocument implements vscode.NotebookDocument {
|
||||
|
||||
let store = this._cellDisposableMapping.get(cell.handle)!;
|
||||
store.add(cell.onDidChangeOutputs(() => {
|
||||
let renderers = new Set<number>();
|
||||
let outputs = cell.outputs;
|
||||
if (outputs && outputs.length) {
|
||||
outputs = outputs.map(output => {
|
||||
let handler = this.renderingHandler.findBestMatchedRenderer(output);
|
||||
|
||||
if (handler) {
|
||||
renderers.add(handler.handle);
|
||||
return handler.render(this, cell, output);
|
||||
} else {
|
||||
return output;
|
||||
@@ -110,7 +112,7 @@ export class ExtHostNotebookDocument implements vscode.NotebookDocument {
|
||||
cell_type: cell.cell_type,
|
||||
outputs: outputs,
|
||||
isDirty: false
|
||||
});
|
||||
}, Array.from(renderers));
|
||||
}));
|
||||
});
|
||||
}
|
||||
@@ -140,13 +142,15 @@ export class ExtHostNotebookDocument implements vscode.NotebookDocument {
|
||||
get isDirty() { return false; }
|
||||
|
||||
async $updateCells(): Promise<void> {
|
||||
return await this._proxy.$updateNotebookCells(this.viewType, this.uri, this.cells.map(cell => {
|
||||
let renderers = new Set<number>();
|
||||
let cells = this.cells.map(cell => {
|
||||
let outputs = cell.outputs;
|
||||
if (outputs && outputs.length) {
|
||||
outputs = outputs.map(output => {
|
||||
let handler = this.renderingHandler.findBestMatchedRenderer(output);
|
||||
|
||||
if (handler) {
|
||||
renderers.add(handler.handle);
|
||||
return handler.render(this, cell, output);
|
||||
} else {
|
||||
return output;
|
||||
@@ -163,7 +167,9 @@ export class ExtHostNotebookDocument implements vscode.NotebookDocument {
|
||||
isDirty: false
|
||||
};
|
||||
}
|
||||
));
|
||||
);
|
||||
|
||||
return await this._proxy.$updateNotebookCells(this.viewType, this.uri, cells, Array.from(renderers));
|
||||
}
|
||||
|
||||
insertRawCell(index: number, cell: ExtHostCell) {
|
||||
@@ -177,11 +183,13 @@ export class ExtHostNotebookDocument implements vscode.NotebookDocument {
|
||||
|
||||
store.add(cell.onDidChangeOutputs(() => {
|
||||
let outputs = cell.outputs;
|
||||
let renderers = new Set<number>();
|
||||
if (outputs && outputs.length) {
|
||||
outputs = outputs.map(output => {
|
||||
let handler = this.renderingHandler.findBestMatchedRenderer(output);
|
||||
|
||||
if (handler) {
|
||||
renderers.add(handler.handle);
|
||||
return handler.render(this, cell, output);
|
||||
} else {
|
||||
return output;
|
||||
@@ -196,7 +204,7 @@ export class ExtHostNotebookDocument implements vscode.NotebookDocument {
|
||||
cell_type: cell.cell_type,
|
||||
outputs: outputs,
|
||||
isDirty: false
|
||||
});
|
||||
}, Array.from(renderers));
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -381,7 +389,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
|
||||
): vscode.Disposable {
|
||||
let extHostRenderer = new ExtHostNotebookOutputRenderer(filter, renderer);
|
||||
this._notebookOutputRenderers.set(extHostRenderer.handle, extHostRenderer);
|
||||
this._proxy.$registerNotebookRenderer({ id: extension.identifier, location: extension.extensionLocation }, filter, extHostRenderer.handle);
|
||||
this._proxy.$registerNotebookRenderer({ id: extension.identifier, location: extension.extensionLocation }, filter, extHostRenderer.handle, renderer.preloads || []);
|
||||
return new VSCodeDisposable(() => {
|
||||
this._notebookOutputRenderers.delete(extHostRenderer.handle);
|
||||
this._proxy.$unregisterNotebookRenderer(extHostRenderer.handle);
|
||||
|
||||
Reference in New Issue
Block a user