@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 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: '@jupyterlab/htmlviewer-extension:plugin',
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.registerFactory(FACTORY, 'refresh', widget => ToolbarItems.createRefreshButton(widget, translator));
50
- toolbarRegistry.registerFactory(FACTORY, 'trust', widget => ToolbarItems.createTrustButton(widget, translator));
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":"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"}
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-alpha.8",
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-alpha.8",
38
- "@jupyterlab/apputils": "^4.0.0-alpha.8",
39
- "@jupyterlab/docregistry": "^4.0.0-alpha.8",
40
- "@jupyterlab/htmlviewer": "^4.0.0-alpha.8",
41
- "@jupyterlab/observables": "^5.0.0-alpha.8",
42
- "@jupyterlab/settingregistry": "^4.0.0-alpha.8",
43
- "@jupyterlab/translation": "^4.0.0-alpha.8",
44
- "@jupyterlab/ui-components": "^4.0.0-alpha.23"
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": "~4.5.2"
49
+ "typescript": "~5.0.2"
49
50
  },
50
51
  "publishConfig": {
51
52
  "access": "public"
@@ -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;