Skip to content

Commit

Permalink
notebook: fix mimetype switcher not working between custom renderers
Browse files Browse the repository at this point in the history
Fixes #125111
  • Loading branch information
connor4312 committed Jun 1, 2021
1 parent ebcbe00 commit d6d9200
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ export class OutputElement extends Disposable {
result = this._notebookEditor.getOutputRenderer().render(this.output, innerContainer, pickedMimeTypeRenderer.mimeType, this._notebookTextModel.uri);
}

this.output.pickedMimeType = pick;
this.output.pickedMimeType = pickedMimeTypeRenderer;
}

this.domNode = outputItemDiv;
Expand Down Expand Up @@ -201,7 +201,7 @@ export class OutputElement extends Disposable {
);
}

viewModel.pickedMimeType = pick;
viewModel.pickedMimeType = mimeTypes[pick];
this.render(index, nextElement as HTMLElement);
}
}
Expand Down
3 changes: 1 addition & 2 deletions src/vs/workbench/contrib/notebook/browser/notebookBrowser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,15 +119,14 @@ export interface ICellOutputViewModel {
*/
model: ICellOutput;
resolveMimeTypes(textModel: NotebookTextModel, kernelProvides: readonly string[] | undefined): [readonly IOrderedMimeType[], number];
pickedMimeType: number;
pickedMimeType: IOrderedMimeType | undefined;
supportAppend(): boolean;
hasMultiMimeType(): boolean;
toRawJSON(): any;
}

export interface IDisplayOutputViewModel extends ICellOutputViewModel {
resolveMimeTypes(textModel: NotebookTextModel, kernelProvides: readonly string[] | undefined): [readonly IOrderedMimeType[], number];
pickedMimeType: number;
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ export class CellOutputElement extends Disposable {
this.renderResult = this.notebookEditor.getOutputRenderer().render(this.output, this.domNode, pickedMimeTypeRenderer.mimeType, notebookUri);
}

this.output.pickedMimeType = pick;
this.output.pickedMimeType = pickedMimeTypeRenderer;

if (!this.renderResult) {
this.viewCell.updateOutputHeight(index, 0, 'CellOutputElement#renderResultUndefined');
Expand Down Expand Up @@ -327,7 +327,7 @@ export class CellOutputElement extends Disposable {
this.notebookEditor.removeInset(viewModel);
}

viewModel.pickedMimeType = pick.index;
viewModel.pickedMimeType = mimeTypes[pick.index];
this.viewCell.updateOutputMinHeight(this.viewCell.layoutInfo.outputTotalHeight);

const { mimeType, rendererId } = mimeTypes[pick.index];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import { Disposable } from 'vs/base/common/lifecycle';
import { ICellOutputViewModel, IGenericCellViewModel } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel';
import { ICellOutput, IOrderedMimeType, mimeTypeIsMergeable, RENDERER_NOT_AVAILABLE } from 'vs/workbench/contrib/notebook/common/notebookCommon';
import { ICellOutput, IOrderedMimeType, mimeTypeIsMergeable } from 'vs/workbench/contrib/notebook/common/notebookCommon';
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';

let handle = 0;
Expand All @@ -16,12 +16,12 @@ export class CellOutputViewModel extends Disposable implements ICellOutputViewMo
return this._outputRawData;
}

private _pickedMimeType: number = -1;
private _pickedMimeType: IOrderedMimeType | undefined;
get pickedMimeType() {
return this._pickedMimeType;
}

set pickedMimeType(value: number) {
set pickedMimeType(value: IOrderedMimeType | undefined) {
this._pickedMimeType = value;
}

Expand Down Expand Up @@ -49,12 +49,12 @@ export class CellOutputViewModel extends Disposable implements ICellOutputViewMo

resolveMimeTypes(textModel: NotebookTextModel, kernelProvides: readonly string[] | undefined): [readonly IOrderedMimeType[], number] {
const mimeTypes = this._notebookService.getMimeTypeInfo(textModel, kernelProvides, this.model);
if (this._pickedMimeType === -1) {
// there is at least one mimetype which is safe and can be rendered by the core
this._pickedMimeType = Math.max(mimeTypes.findIndex(mimeType => mimeType.rendererId !== RENDERER_NOT_AVAILABLE && mimeType.isTrusted), 0);
// there is at least one mimetype which is safe and can be rendered by the core
if (!this._pickedMimeType) {
return [mimeTypes, 0];
}

return [mimeTypes, this._pickedMimeType];
return [mimeTypes, Math.max(mimeTypes.findIndex(mimeType => mimeType.rendererId === this._pickedMimeType!.rendererId && mimeType.mimeType === this._pickedMimeType!.mimeType && mimeType.isTrusted), 0)];
}

toRawJSON() {
Expand Down

0 comments on commit d6d9200

Please sign in to comment.