@jupyterlab/htmlviewer-extension 4.0.0-alpha.8 → 4.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +22 -3
- package/lib/index.js.map +1 -1
- package/package.json +12 -11
- package/schema/plugin.json +8 -0
- package/src/index.tsx +214 -0
package/lib/index.js
CHANGED
|
@@ -12,6 +12,7 @@ import { HTMLViewerFactory, IHTMLViewerTracker, ToolbarItems } from '@jupyterlab
|
|
|
12
12
|
import { ISettingRegistry } from '@jupyterlab/settingregistry';
|
|
13
13
|
import { ITranslator } from '@jupyterlab/translation';
|
|
14
14
|
import { html5Icon } from '@jupyterlab/ui-components';
|
|
15
|
+
const HTML_VIEWER_PLUGIN_ID = '@jupyterlab/htmlviewer-extension:plugin';
|
|
15
16
|
/**
|
|
16
17
|
* Factory name
|
|
17
18
|
*/
|
|
@@ -28,7 +29,7 @@ var CommandIDs;
|
|
|
28
29
|
*/
|
|
29
30
|
const htmlPlugin = {
|
|
30
31
|
activate: activateHTMLViewer,
|
|
31
|
-
id:
|
|
32
|
+
id: HTML_VIEWER_PLUGIN_ID,
|
|
32
33
|
provides: IHTMLViewerTracker,
|
|
33
34
|
requires: [ITranslator],
|
|
34
35
|
optional: [
|
|
@@ -46,8 +47,8 @@ function activateHTMLViewer(app, translator, palette, restorer, settingRegistry,
|
|
|
46
47
|
let toolbarFactory;
|
|
47
48
|
const trans = translator.load('jupyterlab');
|
|
48
49
|
if (toolbarRegistry) {
|
|
49
|
-
toolbarRegistry.
|
|
50
|
-
toolbarRegistry.
|
|
50
|
+
toolbarRegistry.addFactory(FACTORY, 'refresh', widget => ToolbarItems.createRefreshButton(widget, translator));
|
|
51
|
+
toolbarRegistry.addFactory(FACTORY, 'trust', widget => ToolbarItems.createTrustButton(widget, translator));
|
|
51
52
|
if (settingRegistry) {
|
|
52
53
|
toolbarFactory = createToolbarFactory(toolbarRegistry, settingRegistry, FACTORY, htmlPlugin.id, translator);
|
|
53
54
|
}
|
|
@@ -85,6 +86,23 @@ function activateHTMLViewer(app, translator, palette, restorer, settingRegistry,
|
|
|
85
86
|
name: widget => widget.context.path
|
|
86
87
|
});
|
|
87
88
|
}
|
|
89
|
+
let trustByDefault = false;
|
|
90
|
+
if (settingRegistry) {
|
|
91
|
+
const loadSettings = settingRegistry.load(HTML_VIEWER_PLUGIN_ID);
|
|
92
|
+
const updateSettings = (settings) => {
|
|
93
|
+
trustByDefault = settings.get('trustByDefault').composite;
|
|
94
|
+
};
|
|
95
|
+
Promise.all([loadSettings, app.restored])
|
|
96
|
+
.then(([settings]) => {
|
|
97
|
+
updateSettings(settings);
|
|
98
|
+
settings.changed.connect(settings => {
|
|
99
|
+
updateSettings(settings);
|
|
100
|
+
});
|
|
101
|
+
})
|
|
102
|
+
.catch((reason) => {
|
|
103
|
+
console.error(reason.message);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
88
106
|
app.docRegistry.addWidgetFactory(factory);
|
|
89
107
|
factory.widgetCreated.connect((sender, widget) => {
|
|
90
108
|
var _a, _b;
|
|
@@ -99,6 +117,7 @@ function activateHTMLViewer(app, translator, palette, restorer, settingRegistry,
|
|
|
99
117
|
widget.trustedChanged.connect(() => {
|
|
100
118
|
app.commands.notifyCommandChanged(CommandIDs.trustHTML);
|
|
101
119
|
});
|
|
120
|
+
widget.trusted = trustByDefault;
|
|
102
121
|
widget.title.icon = ft.icon;
|
|
103
122
|
widget.title.iconClass = (_a = ft.iconClass) !== null && _a !== void 0 ? _a : '';
|
|
104
123
|
widget.title.iconLabel = (_b = ft.iconLabel) !== null && _b !== void 0 ? _b : '';
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;+EAG+E;AAC/E;;;GAGG;AAEH,OAAO,EACL,eAAe,EAGhB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACb,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,GAAG,aAAa,CAAC;AAE9B;;GAEG;AACH,IAAU,UAAU,CAEnB;AAFD,WAAU,UAAU;IACL,oBAAS,GAAG,uBAAuB,CAAC;AACnD,CAAC,EAFS,UAAU,KAAV,UAAU,QAEnB;AAED;;GAEG;AACH,MAAM,UAAU,GAA8C;IAC5D,QAAQ,EAAE,kBAAkB;IAC5B,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupyterlab/htmlviewer-extension",
|
|
3
|
-
"version": "4.0.0-
|
|
3
|
+
"version": "4.0.0-beta.0",
|
|
4
4
|
"description": "JupyterLab extension to render HTML files",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jupyter",
|
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
"lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}",
|
|
27
27
|
"schema/*.json",
|
|
28
28
|
"style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}",
|
|
29
|
-
"style/index.js"
|
|
29
|
+
"style/index.js",
|
|
30
|
+
"src/**/*.{ts,tsx}"
|
|
30
31
|
],
|
|
31
32
|
"scripts": {
|
|
32
33
|
"build": "tsc -b",
|
|
@@ -34,18 +35,18 @@
|
|
|
34
35
|
"watch": "tsc -w"
|
|
35
36
|
},
|
|
36
37
|
"dependencies": {
|
|
37
|
-
"@jupyterlab/application": "^4.0.0-
|
|
38
|
-
"@jupyterlab/apputils": "^4.0.0-
|
|
39
|
-
"@jupyterlab/docregistry": "^4.0.0-
|
|
40
|
-
"@jupyterlab/htmlviewer": "^4.0.0-
|
|
41
|
-
"@jupyterlab/observables": "^5.0.0-
|
|
42
|
-
"@jupyterlab/settingregistry": "^4.0.0-
|
|
43
|
-
"@jupyterlab/translation": "^4.0.0-
|
|
44
|
-
"@jupyterlab/ui-components": "^4.0.0-
|
|
38
|
+
"@jupyterlab/application": "^4.0.0-beta.0",
|
|
39
|
+
"@jupyterlab/apputils": "^4.0.0-beta.0",
|
|
40
|
+
"@jupyterlab/docregistry": "^4.0.0-beta.0",
|
|
41
|
+
"@jupyterlab/htmlviewer": "^4.0.0-beta.0",
|
|
42
|
+
"@jupyterlab/observables": "^5.0.0-beta.0",
|
|
43
|
+
"@jupyterlab/settingregistry": "^4.0.0-beta.0",
|
|
44
|
+
"@jupyterlab/translation": "^4.0.0-beta.0",
|
|
45
|
+
"@jupyterlab/ui-components": "^4.0.0-beta.0"
|
|
45
46
|
},
|
|
46
47
|
"devDependencies": {
|
|
47
48
|
"rimraf": "~3.0.0",
|
|
48
|
-
"typescript": "~
|
|
49
|
+
"typescript": "~5.0.2"
|
|
49
50
|
},
|
|
50
51
|
"publishConfig": {
|
|
51
52
|
"access": "public"
|
package/schema/plugin.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"title": "HTML Viewer",
|
|
3
3
|
"description": "HTML Viewer settings.",
|
|
4
|
+
"jupyter.lab.setting-icon": "ui-components:html5",
|
|
5
|
+
"jupyter.lab.setting-icon-label": "HTML Viewer",
|
|
4
6
|
"jupyter.lab.toolbars": {
|
|
5
7
|
"HTML Viewer": [
|
|
6
8
|
{ "name": "refresh", "rank": 10 },
|
|
@@ -17,6 +19,12 @@
|
|
|
17
19
|
},
|
|
18
20
|
"type": "array",
|
|
19
21
|
"default": []
|
|
22
|
+
},
|
|
23
|
+
"trustByDefault": {
|
|
24
|
+
"type": "boolean",
|
|
25
|
+
"title": "Trust HTML by default",
|
|
26
|
+
"description": "Whether to trust HTML files upon opening",
|
|
27
|
+
"default": false
|
|
20
28
|
}
|
|
21
29
|
},
|
|
22
30
|
"additionalProperties": false,
|
package/src/index.tsx
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/* -----------------------------------------------------------------------------
|
|
2
|
+
| Copyright (c) Jupyter Development Team.
|
|
3
|
+
| Distributed under the terms of the Modified BSD License.
|
|
4
|
+
|----------------------------------------------------------------------------*/
|
|
5
|
+
/**
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module htmlviewer-extension
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
ILayoutRestorer,
|
|
12
|
+
JupyterFrontEnd,
|
|
13
|
+
JupyterFrontEndPlugin
|
|
14
|
+
} from '@jupyterlab/application';
|
|
15
|
+
import {
|
|
16
|
+
createToolbarFactory,
|
|
17
|
+
ICommandPalette,
|
|
18
|
+
IToolbarWidgetRegistry,
|
|
19
|
+
WidgetTracker
|
|
20
|
+
} from '@jupyterlab/apputils';
|
|
21
|
+
import { DocumentRegistry } from '@jupyterlab/docregistry';
|
|
22
|
+
import {
|
|
23
|
+
HTMLViewer,
|
|
24
|
+
HTMLViewerFactory,
|
|
25
|
+
IHTMLViewerTracker,
|
|
26
|
+
ToolbarItems
|
|
27
|
+
} from '@jupyterlab/htmlviewer';
|
|
28
|
+
import { IObservableList } from '@jupyterlab/observables';
|
|
29
|
+
import { ISettingRegistry } from '@jupyterlab/settingregistry';
|
|
30
|
+
import { ITranslator } from '@jupyterlab/translation';
|
|
31
|
+
import { html5Icon } from '@jupyterlab/ui-components';
|
|
32
|
+
|
|
33
|
+
const HTML_VIEWER_PLUGIN_ID = '@jupyterlab/htmlviewer-extension:plugin';
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Factory name
|
|
37
|
+
*/
|
|
38
|
+
const FACTORY = 'HTML Viewer';
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Command IDs used by the plugin.
|
|
42
|
+
*/
|
|
43
|
+
namespace CommandIDs {
|
|
44
|
+
export const trustHTML = 'htmlviewer:trust-html';
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The HTML file handler extension.
|
|
49
|
+
*/
|
|
50
|
+
const htmlPlugin: JupyterFrontEndPlugin<IHTMLViewerTracker> = {
|
|
51
|
+
activate: activateHTMLViewer,
|
|
52
|
+
id: HTML_VIEWER_PLUGIN_ID,
|
|
53
|
+
provides: IHTMLViewerTracker,
|
|
54
|
+
requires: [ITranslator],
|
|
55
|
+
optional: [
|
|
56
|
+
ICommandPalette,
|
|
57
|
+
ILayoutRestorer,
|
|
58
|
+
ISettingRegistry,
|
|
59
|
+
IToolbarWidgetRegistry
|
|
60
|
+
],
|
|
61
|
+
autoStart: true
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Activate the HTMLViewer extension.
|
|
66
|
+
*/
|
|
67
|
+
function activateHTMLViewer(
|
|
68
|
+
app: JupyterFrontEnd,
|
|
69
|
+
translator: ITranslator,
|
|
70
|
+
palette: ICommandPalette | null,
|
|
71
|
+
restorer: ILayoutRestorer | null,
|
|
72
|
+
settingRegistry: ISettingRegistry | null,
|
|
73
|
+
toolbarRegistry: IToolbarWidgetRegistry | null
|
|
74
|
+
): IHTMLViewerTracker {
|
|
75
|
+
let toolbarFactory:
|
|
76
|
+
| ((widget: HTMLViewer) => IObservableList<DocumentRegistry.IToolbarItem>)
|
|
77
|
+
| undefined;
|
|
78
|
+
const trans = translator.load('jupyterlab');
|
|
79
|
+
|
|
80
|
+
if (toolbarRegistry) {
|
|
81
|
+
toolbarRegistry.addFactory<HTMLViewer>(FACTORY, 'refresh', widget =>
|
|
82
|
+
ToolbarItems.createRefreshButton(widget, translator)
|
|
83
|
+
);
|
|
84
|
+
toolbarRegistry.addFactory<HTMLViewer>(FACTORY, 'trust', widget =>
|
|
85
|
+
ToolbarItems.createTrustButton(widget, translator)
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
if (settingRegistry) {
|
|
89
|
+
toolbarFactory = createToolbarFactory(
|
|
90
|
+
toolbarRegistry,
|
|
91
|
+
settingRegistry,
|
|
92
|
+
FACTORY,
|
|
93
|
+
htmlPlugin.id,
|
|
94
|
+
translator
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Add an HTML file type to the docregistry.
|
|
100
|
+
const ft: DocumentRegistry.IFileType = {
|
|
101
|
+
name: 'html',
|
|
102
|
+
contentType: 'file',
|
|
103
|
+
fileFormat: 'text',
|
|
104
|
+
displayName: trans.__('HTML File'),
|
|
105
|
+
extensions: ['.html'],
|
|
106
|
+
mimeTypes: ['text/html'],
|
|
107
|
+
icon: html5Icon
|
|
108
|
+
};
|
|
109
|
+
app.docRegistry.addFileType(ft);
|
|
110
|
+
|
|
111
|
+
// Create a new viewer factory.
|
|
112
|
+
const factory = new HTMLViewerFactory({
|
|
113
|
+
name: FACTORY,
|
|
114
|
+
label: trans.__('HTML Viewer'),
|
|
115
|
+
fileTypes: ['html'],
|
|
116
|
+
defaultFor: ['html'],
|
|
117
|
+
readOnly: true,
|
|
118
|
+
toolbarFactory,
|
|
119
|
+
translator
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
// Create a widget tracker for HTML documents.
|
|
123
|
+
const tracker = new WidgetTracker<HTMLViewer>({
|
|
124
|
+
namespace: 'htmlviewer'
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
// Handle state restoration.
|
|
128
|
+
if (restorer) {
|
|
129
|
+
void restorer.restore(tracker, {
|
|
130
|
+
command: 'docmanager:open',
|
|
131
|
+
args: widget => ({ path: widget.context.path, factory: 'HTML Viewer' }),
|
|
132
|
+
name: widget => widget.context.path
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
let trustByDefault = false;
|
|
137
|
+
|
|
138
|
+
if (settingRegistry) {
|
|
139
|
+
const loadSettings = settingRegistry.load(HTML_VIEWER_PLUGIN_ID);
|
|
140
|
+
const updateSettings = (settings: ISettingRegistry.ISettings): void => {
|
|
141
|
+
trustByDefault = settings.get('trustByDefault').composite as boolean;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
Promise.all([loadSettings, app.restored])
|
|
145
|
+
.then(([settings]) => {
|
|
146
|
+
updateSettings(settings);
|
|
147
|
+
settings.changed.connect(settings => {
|
|
148
|
+
updateSettings(settings);
|
|
149
|
+
});
|
|
150
|
+
})
|
|
151
|
+
.catch((reason: Error) => {
|
|
152
|
+
console.error(reason.message);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
app.docRegistry.addWidgetFactory(factory);
|
|
157
|
+
factory.widgetCreated.connect((sender, widget) => {
|
|
158
|
+
// Track the widget.
|
|
159
|
+
void tracker.add(widget);
|
|
160
|
+
// Notify the widget tracker if restore data needs to update.
|
|
161
|
+
widget.context.pathChanged.connect(() => {
|
|
162
|
+
void tracker.save(widget);
|
|
163
|
+
});
|
|
164
|
+
// Notify the application when the trust state changes so it
|
|
165
|
+
// can update any renderings of the trust command.
|
|
166
|
+
widget.trustedChanged.connect(() => {
|
|
167
|
+
app.commands.notifyCommandChanged(CommandIDs.trustHTML);
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
widget.trusted = trustByDefault;
|
|
171
|
+
|
|
172
|
+
widget.title.icon = ft.icon!;
|
|
173
|
+
widget.title.iconClass = ft.iconClass ?? '';
|
|
174
|
+
widget.title.iconLabel = ft.iconLabel ?? '';
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
// Add a command to trust the active HTML document,
|
|
178
|
+
// allowing script executions in its context.
|
|
179
|
+
app.commands.addCommand(CommandIDs.trustHTML, {
|
|
180
|
+
label: trans.__('Trust HTML File'),
|
|
181
|
+
caption: trans.__(`Whether the HTML file is trusted.
|
|
182
|
+
Trusting the file allows scripts to run in it,
|
|
183
|
+
which may result in security risks.
|
|
184
|
+
Only enable for files you trust.`),
|
|
185
|
+
isEnabled: () => !!tracker.currentWidget,
|
|
186
|
+
isToggled: () => {
|
|
187
|
+
const current = tracker.currentWidget;
|
|
188
|
+
if (!current) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
const sandbox = current.content.sandbox;
|
|
192
|
+
return sandbox.indexOf('allow-scripts') !== -1;
|
|
193
|
+
},
|
|
194
|
+
execute: () => {
|
|
195
|
+
const current = tracker.currentWidget;
|
|
196
|
+
if (!current) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
current.trusted = !current.trusted;
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
if (palette) {
|
|
203
|
+
palette.addItem({
|
|
204
|
+
command: CommandIDs.trustHTML,
|
|
205
|
+
category: trans.__('File Operations')
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return tracker;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Export the plugins as default.
|
|
213
|
+
*/
|
|
214
|
+
export default htmlPlugin;
|