Skip to content

Commit

Permalink
re #142429. Image renderer moved to extension.
Browse files Browse the repository at this point in the history
  • Loading branch information
rebornix committed Feb 7, 2022
1 parent e46d9fe commit f2b7964
Show file tree
Hide file tree
Showing 14 changed files with 162 additions and 37 deletions.
1 change: 1 addition & 0 deletions build/filters.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ module.exports.unicodeFilter = [
'!build/win32/**',
'!extensions/markdown-language-features/notebook-out/*.js',
'!extensions/markdown-math/notebook-out/**',
'!extensions/notebook-renderers/renderer-out/**',
'!extensions/php-language-features/src/features/phpGlobalFunctions.ts',
'!extensions/typescript-language-features/test-workspace/**',
'!extensions/vscode-api-tests/testWorkspace/**',
Expand Down
1 change: 1 addition & 0 deletions build/lib/extensions.js
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,7 @@ const webpackMediaConfigFiles = [
const esbuildMediaScripts = [
'markdown-language-features/esbuild.js',
'markdown-math/esbuild.js',
'notebook-renderers/esbuild.js'
];
async function webpackExtensions(taskName, isWatch, webpackConfigLocations) {
const webpack = require('webpack');
Expand Down
1 change: 1 addition & 0 deletions build/lib/extensions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,7 @@ const webpackMediaConfigFiles = [
const esbuildMediaScripts = [
'markdown-language-features/esbuild.js',
'markdown-math/esbuild.js',
'notebook-renderers/esbuild.js'
];

export async function webpackExtensions(taskName: string, isWatch: boolean, webpackConfigLocations: { configPath: string; outputRoot?: string }[]) {
Expand Down
1 change: 1 addition & 0 deletions build/npm/dirs.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ exports.dirs = [
'extensions/markdown-math',
'extensions/merge-conflict',
'extensions/microsoft-authentication',
'extensions/notebook-renderers',
'extensions/npm',
'extensions/php-language-features',
'extensions/search-result',
Expand Down
1 change: 1 addition & 0 deletions extensions/notebook-renderers/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
renderer-out
9 changes: 9 additions & 0 deletions extensions/notebook-renderers/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Builtin Notebook Output Renderers for Visual Studio Code

**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.

## Features

This extension provides the following notebook renderers for VS Code:

- Image renderer for png, jpeg and gif
32 changes: 32 additions & 0 deletions extensions/notebook-renderers/esbuild.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
const path = require('path');
const esbuild = require('esbuild');

const args = process.argv.slice(2);

const isWatch = args.indexOf('--watch') >= 0;

let outputRoot = __dirname;
const outputRootIndex = args.indexOf('--outputRoot');
if (outputRootIndex >= 0) {
outputRoot = args[outputRootIndex + 1];
}

const outDir = path.join(outputRoot, 'renderer-out');

esbuild.build({
entryPoints: [
path.join(__dirname, 'src', 'index.ts'),
],
bundle: true,
minify: true,
sourcemap: false,
format: 'esm',
outdir: outDir,
platform: 'browser',
target: ['es2020'],
incremental: isWatch,
}).catch(() => process.exit(1));
46 changes: 46 additions & 0 deletions extensions/notebook-renderers/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"name": "builtin-notebook-renderers",
"displayName": "%displayName%",
"description": "%description%",
"publisher": "vscode",
"version": "1.0.0",
"license": "MIT",
"engines": {
"vscode": "^1.57.0"
},
"capabilities": {
"virtualWorkspaces": true,
"untrustedWorkspaces": {
"supported": true
}
},
"contributes": {
"notebookRenderer": [
{
"id": "vscode-builtin-notebook-renderer",
"entrypoint": "./renderer-out/index.js",
"displayName": "VS Code Builtin Notebook Output Renderer",
"requiresMessaging": "never",
"mimeTypes": [
"image/gif",
"image/png",
"image/jpeg"
]
}
]
},
"scripts": {
"compile": "npm run build-notebook",
"watch": "node ./esbuild --watch",
"build-notebook": "node ./esbuild"
},
"dependencies": {
},
"devDependencies": {
"@types/vscode-notebook-renderer": "^1.60.0"
},
"repository": {
"type": "git",
"url": "https://github.com/microsoft/vscode.git"
}
}
4 changes: 4 additions & 0 deletions extensions/notebook-renderers/package.nls.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"displayName": "Builtin Notebook Output Renderers",
"description": "Provides basic output renderers for notebooks"
}
42 changes: 42 additions & 0 deletions extensions/notebook-renderers/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import type { ActivationFunction } from 'vscode-notebook-renderer';

interface IDisposable {
dispose(): void;
}

export const activate: ActivationFunction<void> = (_ctx) => {
const disposables = new Map<string, IDisposable>();

return {
renderOutputItem: (outputInfo, element) => {
const blob = new Blob([outputInfo.data()], { type: outputInfo.mime });
const src = URL.createObjectURL(blob);
const disposable = {
dispose: () => {
URL.revokeObjectURL(src);
}
};

const image = document.createElement('img');
image.src = src;
const display = document.createElement('div');
display.classList.add('display');
display.appendChild(image);
element.appendChild(display);

disposables.set(outputInfo.id, disposable);
},
disposeOutputItem: (id: string | undefined) => {
if (id) {
disposables.get(id)?.dispose();
} else {
disposables.forEach(d => d.dispose());
}
}
};
};
15 changes: 15 additions & 0 deletions extensions/notebook-renderers/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"extends": "../tsconfig.base.json",
"compilerOptions": {
"outDir": "./out",
"lib": [
"dom"
]
},
"include": [
"src/**/*",
"../../src/vscode-dts/vscode.d.ts",
"../../src/vscode-dts/vscode.proposed.notebookEditor.d.ts",
"../../src/vscode-dts/vscode.proposed.notebookEditorEdit.d.ts",
]
}
8 changes: 8 additions & 0 deletions extensions/notebook-renderers/yarn.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1


"@types/vscode-notebook-renderer@^1.60.0":
version "1.60.0"
resolved "https://registry.yarnpkg.com/@types/vscode-notebook-renderer/-/vscode-notebook-renderer-1.60.0.tgz#8a67d561f48ddf46a95dfa9f712a79c72c7b8f7a"
integrity sha512-u7TD2uuEZTVuitx0iijOJdKI0JLiQP6PsSBSRy2XmHXUOXcp5p1S56NrjOEDoF+PIHd3NL3eO6KTRSf5nukDqQ==
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/

import * as DOM from 'vs/base/browser/dom';
import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle';
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
import { Mimes } from 'vs/base/common/mime';
import { URI } from 'vs/base/common/uri';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
Expand Down Expand Up @@ -210,42 +210,8 @@ class HTMLRendererContrib extends Disposable implements IOutputTransformContribu
}
}

class ImgRendererContrib extends Disposable implements IOutputTransformContribution {
getType() {
return RenderOutputType.Mainframe;
}

getMimetypes() {
return ['image/png', 'image/jpeg', 'image/gif'];
}

constructor(
public notebookEditor: INotebookDelegateForOutput,
) {
super();
}

render(output: ICellOutputViewModel, item: IOutputItemDto, container: HTMLElement, notebookUri: URI): IRenderOutput {
const disposable = new DisposableStore();

const blob = new Blob([item.data.buffer], { type: item.mime });
const src = URL.createObjectURL(blob);
disposable.add(toDisposable(() => URL.revokeObjectURL(src)));

const image = document.createElement('img');
image.src = src;
const display = document.createElement('div');
display.classList.add('display');
display.appendChild(image);
container.appendChild(display);

return { type: RenderOutputType.Mainframe, disposable };
}
}

OutputRendererRegistry.registerOutputTransform(JavaScriptRendererContrib);
OutputRendererRegistry.registerOutputTransform(HTMLRendererContrib);
OutputRendererRegistry.registerOutputTransform(ImgRendererContrib);
OutputRendererRegistry.registerOutputTransform(PlainTextRendererContrib);
OutputRendererRegistry.registerOutputTransform(JSErrorRendererContrib);
OutputRendererRegistry.registerOutputTransform(StreamRendererContrib);
Expand Down
2 changes: 0 additions & 2 deletions src/vs/workbench/contrib/notebook/common/notebookCommon.ts
Original file line number Diff line number Diff line change
Expand Up @@ -598,8 +598,6 @@ type MimeTypeInfo = {

const _mimeTypeInfo = new Map<string, MimeTypeInfo>([
['application/javascript', { supportedByCore: true }],
['image/png', { alwaysSecure: true, supportedByCore: true }],
['image/jpeg', { alwaysSecure: true, supportedByCore: true }],
['image/git', { alwaysSecure: true, supportedByCore: true }],
['image/svg+xml', { supportedByCore: true }],
['application/json', { alwaysSecure: true, supportedByCore: true }],
Expand Down

0 comments on commit f2b7964

Please sign in to comment.