Skip to content

Commit 96dbce2

Browse files
committed
Separate jupyter widgets manager extension
1 parent f625a4d commit 96dbce2

File tree

19 files changed

+490
-88
lines changed

19 files changed

+490
-88
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ jobs:
3232
run: |
3333
jupyter nbextension list 2>&1 | grep -ie "voila/extension.*enabled" -
3434
jupyter labextension list 2>&1 | grep -ie "@voila-dashboards/jupyterlab-preview.*enabled.*ok" -
35+
jupyter labextension list 2>&1 | grep -ie "@voila-dashboards/widgets-manager.*enabled.*ok" -
3536
jupyter server extension list 2>&1 | grep -ie "voila\.server_extension.*enabled" -
3637
3738
- name: Browser check

.github/workflows/packaging.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ jobs:
9595
run: |
9696
jupyter labextension list
9797
jupyter labextension list 2>&1 | grep -ie "@voila-dashboards/jupyterlab-preview.*enabled.*ok" -
98+
jupyter labextension list 2>&1 | grep -ie "@voila-dashboards/widgets-manager.*enabled.*ok" -
9899
jupyter server extension list
99100
jupyter server extension list 2>&1 | grep -ie "voila.server_extension.*enabled" -
100101
jupyter nbextension list

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ share/jupyter/voila/templates/base/static/*.LICENSE.txt
4444

4545
lib
4646

47-
voila/labextension
47+
voila/labextensions
4848
tsconfig.tsbuildinfo
4949

5050
ui-tests/playwright-report

packages/jupyterlab-preview/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"build:prod": "jlpm run build:lib && jlpm run build:labextension",
3939
"build:test": "tsc --build tsconfig.test.json",
4040
"clean": "jlpm run clean:lib && jlpm run clean:labextension",
41-
"clean:labextension": "rimraf ../../voila/labextension",
41+
"clean:labextension": "rimraf ../../voila/labextensions/jupyterlab-preview",
4242
"clean:lib": "rimraf lib tsconfig.tsbuildinfo",
4343
"test": "jest",
4444
"watch": "run-p watch:src watch:labextension",
@@ -75,7 +75,7 @@
7575
"jupyterlab": {
7676
"extension": true,
7777
"schemaDir": "schema",
78-
"outputDir": "../../voila/labextension",
78+
"outputDir": "../../voila/labextensions/jupyterlab-preview",
7979
"discovery": {
8080
"server": {
8181
"managers": [

packages/voila/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
"main": "lib/index.js",
88
"browserslist": ">0.8%, not ie 11, not op_mini all, not dead",
99
"dependencies": {
10-
"@jupyter-widgets/base": "^6.0.6",
1110
"@jupyter-widgets/jupyterlab-manager": "^5.0.9",
1211
"@jupyterlab/application": "^4.0.0",
1312
"@jupyterlab/apputils": "^4.0.0",
@@ -18,7 +17,7 @@
1817
"@jupyterlab/docregistry": "^4.0.0",
1918
"@jupyterlab/javascript-extension": "^4.0.0",
2019
"@jupyterlab/json-extension": "^4.0.0",
21-
"@jupyterlab/logconsole": "^4.0.0",
20+
"@jupyterlab/logconsole": "^4.0.5",
2221
"@jupyterlab/mainmenu": "^4.0.0",
2322
"@jupyterlab/markdownviewer-extension": "^4.0.0",
2423
"@jupyterlab/markedparser-extension": "^4.0.0",
@@ -43,6 +42,7 @@
4342
"@lumino/domutils": "^2.0.0",
4443
"@lumino/dragdrop": "^2.0.0",
4544
"@lumino/messaging": "^2.0.0",
45+
"@lumino/polling": "^2.0.0",
4646
"@lumino/properties": "^2.0.0",
4747
"@lumino/signaling": "^2.0.0",
4848
"@lumino/virtualdom": "^2.0.0",

packages/voila/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
export * from './app';
1111
export * from './shell';
12-
export * from './voilaplugins';
12+
export * from './plugins';
1313
export * from './tools';
1414
export * from './plugins/tree/browser';
1515
export * from './plugins/tree/listing';

packages/voila/src/main.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import './sharedscope';
1313
import { PageConfig, URLExt } from '@jupyterlab/coreutils';
1414

1515
import { VoilaApp } from './app';
16-
import plugins from './voilaplugins';
16+
import plugins from './plugins';
1717
import { VoilaServiceManager } from './services/servicemanager';
1818
import { VoilaShell } from './shell';
1919
import {
@@ -56,6 +56,11 @@ async function main() {
5656
const extensionData: IFederatedExtensionData[] = JSON.parse(
5757
PageConfig.getOption('federated_extensions')
5858
);
59+
60+
// Move the widget manager to the first position
61+
const managerIdx = extensionData.findIndex((value) => value.name === '@voila-dashboards/widgets-manager');
62+
extensionData.splice(0, 0, extensionData.splice(managerIdx, 1)[0])
63+
5964
const federatedExtensionPromises: Promise<any>[] = [];
6065
const federatedMimeExtensionPromises: Promise<any>[] = [];
6166
const federatedStylePromises: Promise<any>[] = [];

packages/voila/src/voilaplugins.ts renamed to packages/voila/src/plugins/index.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,17 @@
88
****************************************************************************/
99

1010
import { JupyterFrontEndPlugin } from '@jupyterlab/application';
11-
import { pathsPlugin } from './plugins/path';
12-
import { translatorPlugin } from './plugins/translator';
13-
import { renderOutputsPlugin, widgetManager } from './plugins/widget';
14-
import { themePlugin, themesManagerPlugin } from './plugins/themes';
11+
import { pathsPlugin } from './path';
12+
import { translatorPlugin } from './translator';
13+
import { renderOutputsPlugin } from './outputs_rendering';
14+
import { themePlugin, themesManagerPlugin } from './themes';
1515

1616
/**
1717
* Export the plugins as default.
1818
*/
1919
const plugins: JupyterFrontEndPlugin<any>[] = [
2020
pathsPlugin,
2121
translatorPlugin,
22-
widgetManager,
2322
renderOutputsPlugin,
2423
themesManagerPlugin,
2524
themePlugin
@@ -30,7 +29,6 @@ export default plugins;
3029
export {
3130
pathsPlugin,
3231
translatorPlugin,
33-
widgetManager,
3432
renderOutputsPlugin,
3533
themesManagerPlugin,
3634
themePlugin
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/***************************************************************************
2+
* Copyright (c) 2018, Voilà contributors *
3+
* Copyright (c) 2018, QuantStack *
4+
* *
5+
* Distributed under the terms of the BSD 3-Clause License. *
6+
* *
7+
* The full license is in the file LICENSE, distributed with this software. *
8+
****************************************************************************/
9+
10+
import {
11+
JupyterFrontEnd,
12+
JupyterFrontEndPlugin
13+
} from '@jupyterlab/application';
14+
15+
import { IRenderMimeRegistry } from '@jupyterlab/rendermime';
16+
17+
import { Widget } from '@lumino/widgets';
18+
19+
/**
20+
* The plugin that renders outputs.
21+
*/
22+
export const renderOutputsPlugin: JupyterFrontEndPlugin<void> = {
23+
id: '@voila-dashboards/voila:render-outputs',
24+
autoStart: true,
25+
requires: [IRenderMimeRegistry],
26+
activate: async (
27+
app: JupyterFrontEnd,
28+
rendermime: IRenderMimeRegistry
29+
): Promise<void> => {
30+
// Render outputs
31+
const cellOutputs = document.body.querySelectorAll(
32+
'script[type="application/vnd.voila.cell-output+json"]'
33+
);
34+
cellOutputs.forEach(async (cellOutput) => {
35+
const model = JSON.parse(cellOutput.innerHTML);
36+
37+
const mimeType = rendermime.preferredMimeType(model.data, 'any');
38+
39+
if (!mimeType) {
40+
return null;
41+
}
42+
const output = rendermime.createRenderer(mimeType);
43+
output.renderModel(model).catch((error) => {
44+
// Manually append error message to output
45+
const pre = document.createElement('pre');
46+
pre.textContent = `Javascript Error: ${error.message}`;
47+
output.node.appendChild(pre);
48+
49+
// Remove mime-type-specific CSS classes
50+
pre.className = 'lm-Widget jp-RenderedText';
51+
pre.setAttribute('data-mime-type', 'application/vnd.jupyter.stderr');
52+
});
53+
54+
output.addClass('jp-OutputArea-output');
55+
56+
if (cellOutput.parentElement) {
57+
const container = cellOutput.parentElement;
58+
59+
container.removeChild(cellOutput);
60+
61+
// Attach output
62+
Widget.attach(output, container);
63+
}
64+
});
65+
const node = document.getElementById('rendered_cells');
66+
if (node) {
67+
const cells = new Widget({ node });
68+
app.shell.add(cells, 'main');
69+
}
70+
}
71+
};

packages/voila/src/sharedscope.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
import '@jupyterlab/application';
2+
import '@jupyterlab/coreutils';
3+
import '@jupyterlab/rendermime';
4+
import '@jupyterlab/services';
5+
import '@jupyterlab/statedb';
6+
import '@jupyterlab/notebook';
7+
import '@jupyterlab/mainmenu';
8+
import '@jupyterlab/logconsole';
19
import '@lumino/algorithm';
210
import '@lumino/application';
311
import '@lumino/coreutils';

0 commit comments

Comments
 (0)