@jupyterlab/extensionmanager-extension 4.7.0-alpha.1 → 4.7.0-alpha.2
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 +34 -13
- package/lib/index.js.map +1 -1
- package/package.json +7 -7
- package/src/index.ts +41 -12
package/lib/index.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { ILayoutRestorer } from '@jupyterlab/application';
|
|
8
8
|
import { Dialog, ICommandPalette, showDialog } from '@jupyterlab/apputils';
|
|
9
|
-
import { ExtensionsPanel, ListModel } from '@jupyterlab/extensionmanager';
|
|
9
|
+
import { ExtensionsPanel, IExtensionManagerModel, ListModel } from '@jupyterlab/extensionmanager';
|
|
10
10
|
import { ISettingRegistry } from '@jupyterlab/settingregistry';
|
|
11
11
|
import { ITranslator, nullTranslator } from '@jupyterlab/translation';
|
|
12
12
|
import { extensionIcon } from '@jupyterlab/ui-components';
|
|
@@ -27,12 +27,18 @@ const plugin = {
|
|
|
27
27
|
description: 'Adds the extension manager plugin.',
|
|
28
28
|
autoStart: true,
|
|
29
29
|
requires: [ISettingRegistry],
|
|
30
|
-
optional: [
|
|
31
|
-
|
|
30
|
+
optional: [
|
|
31
|
+
ITranslator,
|
|
32
|
+
ILayoutRestorer,
|
|
33
|
+
ICommandPalette,
|
|
34
|
+
IExtensionManagerModel
|
|
35
|
+
],
|
|
36
|
+
activate: async (app, registry, translator, restorer, palette, extensionManagerModel) => {
|
|
32
37
|
const { commands, shell, serviceManager } = app;
|
|
33
38
|
translator = translator !== null && translator !== void 0 ? translator : nullTranslator;
|
|
34
39
|
const trans = translator.load('jupyterlab');
|
|
35
|
-
|
|
40
|
+
// Use the model provided by the distribution, if any, else the default.
|
|
41
|
+
const model = extensionManagerModel !== null && extensionManagerModel !== void 0 ? extensionManagerModel : new ListModel(serviceManager, translator);
|
|
36
42
|
const createView = () => {
|
|
37
43
|
const v = new ExtensionsPanel({ model, translator: translator });
|
|
38
44
|
v.id = 'extensionmanager.main-view';
|
|
@@ -52,12 +58,15 @@ const plugin = {
|
|
|
52
58
|
};
|
|
53
59
|
// Create a view by default, so it can be restored when loading the workspace.
|
|
54
60
|
let view = createView();
|
|
61
|
+
if (!model.canInstall) {
|
|
62
|
+
// A read-only manager cannot be toggled off; keep the panel enabled.
|
|
63
|
+
model.isEnabled = true;
|
|
64
|
+
}
|
|
55
65
|
// If the extension is enabled or disabled,
|
|
56
66
|
// add or remove it from the left area.
|
|
57
67
|
Promise.all([app.restored, registry.load(PLUGIN_ID)])
|
|
58
68
|
.then(([, settings]) => {
|
|
59
69
|
model.isDisclaimed = settings.get('disclaimed').composite;
|
|
60
|
-
model.isEnabled = settings.get('enabled').composite;
|
|
61
70
|
model.stateChanged.connect(() => {
|
|
62
71
|
if (model.isDisclaimed !==
|
|
63
72
|
settings.get('disclaimed').composite) {
|
|
@@ -65,21 +74,19 @@ const plugin = {
|
|
|
65
74
|
console.error(`Failed to set setting 'disclaimed'.\n${reason}`);
|
|
66
75
|
});
|
|
67
76
|
}
|
|
68
|
-
if (model.
|
|
77
|
+
if (model.canInstall &&
|
|
78
|
+
model.isEnabled !== settings.get('enabled').composite) {
|
|
69
79
|
settings.set('enabled', model.isEnabled).catch(reason => {
|
|
70
80
|
console.error(`Failed to set setting 'enabled'.\n${reason}`);
|
|
71
81
|
});
|
|
72
82
|
}
|
|
73
83
|
});
|
|
74
|
-
if (model.isEnabled) {
|
|
75
|
-
view = view !== null && view !== void 0 ? view : createView();
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
view === null || view === void 0 ? void 0 : view.dispose();
|
|
79
|
-
view = null;
|
|
80
|
-
}
|
|
81
84
|
settings.changed.connect(async () => {
|
|
82
85
|
model.isDisclaimed = settings.get('disclaimed').composite;
|
|
86
|
+
// Only an installable manager exposes the enable/disable toggle.
|
|
87
|
+
if (!model.canInstall) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
83
90
|
model.isEnabled = settings.get('enabled').composite;
|
|
84
91
|
app.commands.notifyCommandChanged(CommandIDs.toggle);
|
|
85
92
|
if (model.isEnabled) {
|
|
@@ -97,6 +104,18 @@ const plugin = {
|
|
|
97
104
|
view = null;
|
|
98
105
|
}
|
|
99
106
|
});
|
|
107
|
+
// The rest wires the enable/disable lifecycle of an installable manager.
|
|
108
|
+
if (!model.canInstall) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
model.isEnabled = settings.get('enabled').composite;
|
|
112
|
+
if (model.isEnabled) {
|
|
113
|
+
view = view !== null && view !== void 0 ? view : createView();
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
view === null || view === void 0 ? void 0 : view.dispose();
|
|
117
|
+
view = null;
|
|
118
|
+
}
|
|
100
119
|
})
|
|
101
120
|
.catch(reason => {
|
|
102
121
|
console.error(`Something went wrong when reading the settings.\n${reason}`);
|
|
@@ -132,6 +151,8 @@ const plugin = {
|
|
|
132
151
|
}
|
|
133
152
|
},
|
|
134
153
|
isToggled: () => model.isEnabled,
|
|
154
|
+
// Read-only managers are always enabled and cannot be disabled.
|
|
155
|
+
isVisible: () => model.canInstall,
|
|
135
156
|
describedBy: {
|
|
136
157
|
args: {
|
|
137
158
|
type: 'object',
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAC3D;;;GAGG;AAMH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupyterlab/extensionmanager-extension",
|
|
3
|
-
"version": "4.7.0-alpha.
|
|
3
|
+
"version": "4.7.0-alpha.2",
|
|
4
4
|
"description": "JupyterLab - Extension Manager Extension",
|
|
5
5
|
"homepage": "https://github.com/jupyterlab/jupyterlab",
|
|
6
6
|
"bugs": {
|
|
@@ -38,12 +38,12 @@
|
|
|
38
38
|
"watch": "tsc -b --watch"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@jupyterlab/application": "^4.7.0-alpha.
|
|
42
|
-
"@jupyterlab/apputils": "^4.8.0-alpha.
|
|
43
|
-
"@jupyterlab/extensionmanager": "^4.7.0-alpha.
|
|
44
|
-
"@jupyterlab/settingregistry": "^4.7.0-alpha.
|
|
45
|
-
"@jupyterlab/translation": "^4.7.0-alpha.
|
|
46
|
-
"@jupyterlab/ui-components": "^4.7.0-alpha.
|
|
41
|
+
"@jupyterlab/application": "^4.7.0-alpha.2",
|
|
42
|
+
"@jupyterlab/apputils": "^4.8.0-alpha.2",
|
|
43
|
+
"@jupyterlab/extensionmanager": "^4.7.0-alpha.2",
|
|
44
|
+
"@jupyterlab/settingregistry": "^4.7.0-alpha.2",
|
|
45
|
+
"@jupyterlab/translation": "^4.7.0-alpha.2",
|
|
46
|
+
"@jupyterlab/ui-components": "^4.7.0-alpha.2"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"rimraf": "~5.0.5",
|
package/src/index.ts
CHANGED
|
@@ -11,7 +11,11 @@ import type {
|
|
|
11
11
|
} from '@jupyterlab/application';
|
|
12
12
|
import { ILayoutRestorer } from '@jupyterlab/application';
|
|
13
13
|
import { Dialog, ICommandPalette, showDialog } from '@jupyterlab/apputils';
|
|
14
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
ExtensionsPanel,
|
|
16
|
+
IExtensionManagerModel,
|
|
17
|
+
ListModel
|
|
18
|
+
} from '@jupyterlab/extensionmanager';
|
|
15
19
|
import { ISettingRegistry } from '@jupyterlab/settingregistry';
|
|
16
20
|
import type { TranslationBundle } from '@jupyterlab/translation';
|
|
17
21
|
import { ITranslator, nullTranslator } from '@jupyterlab/translation';
|
|
@@ -35,19 +39,27 @@ const plugin: JupyterFrontEndPlugin<void> = {
|
|
|
35
39
|
description: 'Adds the extension manager plugin.',
|
|
36
40
|
autoStart: true,
|
|
37
41
|
requires: [ISettingRegistry],
|
|
38
|
-
optional: [
|
|
42
|
+
optional: [
|
|
43
|
+
ITranslator,
|
|
44
|
+
ILayoutRestorer,
|
|
45
|
+
ICommandPalette,
|
|
46
|
+
IExtensionManagerModel
|
|
47
|
+
],
|
|
39
48
|
activate: async (
|
|
40
49
|
app: JupyterFrontEnd,
|
|
41
50
|
registry: ISettingRegistry,
|
|
42
51
|
translator: ITranslator | null,
|
|
43
52
|
restorer: ILayoutRestorer | null,
|
|
44
|
-
palette: ICommandPalette | null
|
|
53
|
+
palette: ICommandPalette | null,
|
|
54
|
+
extensionManagerModel: IExtensionManagerModel | null
|
|
45
55
|
) => {
|
|
46
56
|
const { commands, shell, serviceManager } = app;
|
|
47
57
|
translator = translator ?? nullTranslator;
|
|
48
58
|
const trans = translator.load('jupyterlab');
|
|
49
59
|
|
|
50
|
-
|
|
60
|
+
// Use the model provided by the distribution, if any, else the default.
|
|
61
|
+
const model =
|
|
62
|
+
extensionManagerModel ?? new ListModel(serviceManager, translator);
|
|
51
63
|
|
|
52
64
|
const createView = () => {
|
|
53
65
|
const v = new ExtensionsPanel({ model, translator: translator! });
|
|
@@ -71,12 +83,16 @@ const plugin: JupyterFrontEndPlugin<void> = {
|
|
|
71
83
|
// Create a view by default, so it can be restored when loading the workspace.
|
|
72
84
|
let view: ExtensionsPanel | null = createView();
|
|
73
85
|
|
|
86
|
+
if (!model.canInstall) {
|
|
87
|
+
// A read-only manager cannot be toggled off; keep the panel enabled.
|
|
88
|
+
model.isEnabled = true;
|
|
89
|
+
}
|
|
90
|
+
|
|
74
91
|
// If the extension is enabled or disabled,
|
|
75
92
|
// add or remove it from the left area.
|
|
76
93
|
Promise.all([app.restored, registry.load(PLUGIN_ID)])
|
|
77
94
|
.then(([, settings]) => {
|
|
78
95
|
model.isDisclaimed = settings.get('disclaimed').composite as boolean;
|
|
79
|
-
model.isEnabled = settings.get('enabled').composite as boolean;
|
|
80
96
|
model.stateChanged.connect(() => {
|
|
81
97
|
if (
|
|
82
98
|
model.isDisclaimed !==
|
|
@@ -87,6 +103,7 @@ const plugin: JupyterFrontEndPlugin<void> = {
|
|
|
87
103
|
});
|
|
88
104
|
}
|
|
89
105
|
if (
|
|
106
|
+
model.canInstall &&
|
|
90
107
|
model.isEnabled !== (settings.get('enabled').composite as boolean)
|
|
91
108
|
) {
|
|
92
109
|
settings.set('enabled', model.isEnabled).catch(reason => {
|
|
@@ -95,15 +112,12 @@ const plugin: JupyterFrontEndPlugin<void> = {
|
|
|
95
112
|
}
|
|
96
113
|
});
|
|
97
114
|
|
|
98
|
-
if (model.isEnabled) {
|
|
99
|
-
view = view ?? createView();
|
|
100
|
-
} else {
|
|
101
|
-
view?.dispose();
|
|
102
|
-
view = null;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
115
|
settings.changed.connect(async () => {
|
|
106
116
|
model.isDisclaimed = settings.get('disclaimed').composite as boolean;
|
|
117
|
+
// Only an installable manager exposes the enable/disable toggle.
|
|
118
|
+
if (!model.canInstall) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
107
121
|
model.isEnabled = settings.get('enabled').composite as boolean;
|
|
108
122
|
app.commands.notifyCommandChanged(CommandIDs.toggle);
|
|
109
123
|
|
|
@@ -121,6 +135,19 @@ const plugin: JupyterFrontEndPlugin<void> = {
|
|
|
121
135
|
view = null;
|
|
122
136
|
}
|
|
123
137
|
});
|
|
138
|
+
|
|
139
|
+
// The rest wires the enable/disable lifecycle of an installable manager.
|
|
140
|
+
if (!model.canInstall) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
model.isEnabled = settings.get('enabled').composite as boolean;
|
|
145
|
+
if (model.isEnabled) {
|
|
146
|
+
view = view ?? createView();
|
|
147
|
+
} else {
|
|
148
|
+
view?.dispose();
|
|
149
|
+
view = null;
|
|
150
|
+
}
|
|
124
151
|
})
|
|
125
152
|
.catch(reason => {
|
|
126
153
|
console.error(
|
|
@@ -162,6 +189,8 @@ const plugin: JupyterFrontEndPlugin<void> = {
|
|
|
162
189
|
}
|
|
163
190
|
},
|
|
164
191
|
isToggled: () => model.isEnabled,
|
|
192
|
+
// Read-only managers are always enabled and cannot be disabled.
|
|
193
|
+
isVisible: () => model.canInstall,
|
|
165
194
|
describedBy: {
|
|
166
195
|
args: {
|
|
167
196
|
type: 'object',
|