|
@@ -6,7 +6,7 @@ import {
|
|
|
} from '@jupyterlab/services';
|
|
|
|
|
|
import {
|
|
|
- each
|
|
|
+ IterableOrArrayLike, each
|
|
|
} from 'phosphor/lib/algorithm/iteration';
|
|
|
|
|
|
import {
|
|
@@ -47,7 +47,9 @@ const FILE_CONFLICT_CLASS = 'jp-mod-conflict';
|
|
|
export
|
|
|
function createFromDialog(model: FileBrowserModel, manager: DocumentManager, creatorName: string): Promise<Widget> {
|
|
|
let handler = new CreateFromHandler(model, manager, creatorName);
|
|
|
- return handler.populate().then(() => {
|
|
|
+ return manager.services.ready().then(() => {
|
|
|
+ return handler.populate();
|
|
|
+ }).then(() => {
|
|
|
return handler.showDialog();
|
|
|
});
|
|
|
}
|
|
@@ -59,8 +61,8 @@ function createFromDialog(model: FileBrowserModel, manager: DocumentManager, cre
|
|
|
export
|
|
|
function openWithDialog(path: string, manager: DocumentManager, host?: HTMLElement): Promise<Widget> {
|
|
|
let handler: OpenWithHandler;
|
|
|
- return manager.listSessions().then(sessions => {
|
|
|
- handler = new OpenWithHandler(path, manager, sessions);
|
|
|
+ return manager.services.ready().then(() => {
|
|
|
+ handler = new OpenWithHandler(path, manager);
|
|
|
return showDialog({
|
|
|
title: 'Open File',
|
|
|
body: handler.node,
|
|
@@ -80,8 +82,8 @@ function openWithDialog(path: string, manager: DocumentManager, host?: HTMLEleme
|
|
|
export
|
|
|
function createNewDialog(model: FileBrowserModel, manager: DocumentManager, host?: HTMLElement): Promise<Widget> {
|
|
|
let handler: CreateNewHandler;
|
|
|
- return manager.listSessions().then(sessions => {
|
|
|
- handler = new CreateNewHandler(model, manager, sessions);
|
|
|
+ return manager.services.ready().then(() => {
|
|
|
+ handler = new CreateNewHandler(model, manager);
|
|
|
return showDialog({
|
|
|
title: 'Create New File',
|
|
|
host,
|
|
@@ -132,11 +134,9 @@ class OpenWithHandler extends Widget {
|
|
|
/**
|
|
|
* Construct a new "open with" dialog.
|
|
|
*/
|
|
|
- constructor(path: string, manager: DocumentManager, sessions: Session.IModel[], host?: HTMLElement) {
|
|
|
+ constructor(path: string, manager: DocumentManager) {
|
|
|
super({ node: Private.createOpenWithNode() });
|
|
|
this._manager = manager;
|
|
|
- this._host = host;
|
|
|
- this._sessions = sessions;
|
|
|
|
|
|
this.inputNode.textContent = path;
|
|
|
this._ext = path.split('.').pop();
|
|
@@ -149,9 +149,7 @@ class OpenWithHandler extends Widget {
|
|
|
* Dispose of the resources used by the widget.
|
|
|
*/
|
|
|
dispose(): void {
|
|
|
- this._host = null;
|
|
|
this._manager = null;
|
|
|
- this._sessions = null;
|
|
|
super.dispose();
|
|
|
}
|
|
|
|
|
@@ -212,8 +210,8 @@ class OpenWithHandler extends Widget {
|
|
|
let preference = this._manager.registry.getKernelPreference(
|
|
|
this._ext, widgetName
|
|
|
);
|
|
|
- let specs = this._manager.kernelspecs;
|
|
|
- let sessions = this._sessions;
|
|
|
+ let specs = this._manager.services.specs;
|
|
|
+ let sessions = this._manager.services.sessions.running();
|
|
|
Private.updateKernels(this.kernelDropdownNode,
|
|
|
{ preference, specs, sessions }
|
|
|
);
|
|
@@ -221,8 +219,6 @@ class OpenWithHandler extends Widget {
|
|
|
|
|
|
private _ext = '';
|
|
|
private _manager: DocumentManager = null;
|
|
|
- private _host: HTMLElement = null;
|
|
|
- private _sessions: Session.IModel[] = null;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -323,8 +319,8 @@ class CreateFromHandler extends Widget {
|
|
|
// Handle the kernel preferences.
|
|
|
let preference = registry.getKernelPreference(ext, widgetName);
|
|
|
if (preference.canStartKernel) {
|
|
|
- let specs = this._manager.kernelspecs;
|
|
|
- let sessions = this._sessions;
|
|
|
+ let specs = this._manager.services.specs;
|
|
|
+ let sessions = this._manager.services.sessions.running();
|
|
|
let preferredKernel = kernelName;
|
|
|
Private.updateKernels(this.kernelDropdownNode,
|
|
|
{ specs, sessions, preferredKernel, preference }
|
|
@@ -333,10 +329,7 @@ class CreateFromHandler extends Widget {
|
|
|
this.node.removeChild(this.kernelDropdownNode);
|
|
|
}
|
|
|
|
|
|
- return manager.listSessions().then(sessions => {
|
|
|
- this._sessions = sessions;
|
|
|
- return model.newUntitled({ ext, type });
|
|
|
- }).then((contents: Contents.IModel) => {
|
|
|
+ return model.newUntitled({ ext, type }).then(contents => {
|
|
|
this.inputNode.value = contents.name;
|
|
|
this._orig = contents;
|
|
|
});
|
|
@@ -372,7 +365,6 @@ class CreateFromHandler extends Widget {
|
|
|
private _widgetName: string;
|
|
|
private _orig: Contents.IModel = null;
|
|
|
private _manager: DocumentManager;
|
|
|
- private _sessions: Session.IModel[] = [];
|
|
|
}
|
|
|
|
|
|
|
|
@@ -383,11 +375,10 @@ class CreateNewHandler extends Widget {
|
|
|
/**
|
|
|
* Construct a new "create new" dialog.
|
|
|
*/
|
|
|
- constructor(model: FileBrowserModel, manager: DocumentManager, sessions: Session.IModel[]) {
|
|
|
+ constructor(model: FileBrowserModel, manager: DocumentManager) {
|
|
|
super({ node: Private.createCreateNewNode() });
|
|
|
this._model = model;
|
|
|
this._manager = manager;
|
|
|
- this._sessions = sessions;
|
|
|
|
|
|
// Create a file name based on the current time.
|
|
|
let time = new Date();
|
|
@@ -418,7 +409,6 @@ class CreateNewHandler extends Widget {
|
|
|
*/
|
|
|
dispose(): void {
|
|
|
this._model = null;
|
|
|
- this._sessions = null;
|
|
|
this._manager = null;
|
|
|
super.dispose();
|
|
|
}
|
|
@@ -489,7 +479,7 @@ class CreateNewHandler extends Widget {
|
|
|
}
|
|
|
// Update the file type dropdown and the factories.
|
|
|
if (this._extensions.indexOf(ext) === -1) {
|
|
|
- this.fileTypeDropdown.value = this._sentinal;
|
|
|
+ this.fileTypeDropdown.value = this._sentinel;
|
|
|
} else {
|
|
|
this.fileTypeDropdown.value = ext;
|
|
|
}
|
|
@@ -503,7 +493,7 @@ class CreateNewHandler extends Widget {
|
|
|
let dropdown = this.fileTypeDropdown;
|
|
|
let option = document.createElement('option');
|
|
|
option.text = 'File';
|
|
|
- option.value = this._sentinal;
|
|
|
+ option.value = this._sentinel;
|
|
|
|
|
|
each(this._manager.registry.fileTypes(), ft => {
|
|
|
option = document.createElement('option');
|
|
@@ -515,7 +505,7 @@ class CreateNewHandler extends Widget {
|
|
|
if (this.ext in this._extensions) {
|
|
|
dropdown.value = this.ext;
|
|
|
} else {
|
|
|
- dropdown.value = this._sentinal;
|
|
|
+ dropdown.value = this._sentinel;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -556,9 +546,10 @@ class CreateNewHandler extends Widget {
|
|
|
protected widgetDropdownChanged(): void {
|
|
|
let ext = this.ext;
|
|
|
let widgetName = this.widgetDropdown.value;
|
|
|
- let preference = this._manager.registry.getKernelPreference(ext, widgetName);
|
|
|
- let specs = this._manager.kernelspecs;
|
|
|
- let sessions = this._sessions;
|
|
|
+ let manager = this._manager;
|
|
|
+ let preference = manager.registry.getKernelPreference(ext, widgetName);
|
|
|
+ let specs = manager.services.specs;
|
|
|
+ let sessions = manager.services.sessions.running();
|
|
|
Private.updateKernels(this.kernelDropdownNode,
|
|
|
{ preference, sessions, specs }
|
|
|
);
|
|
@@ -566,8 +557,7 @@ class CreateNewHandler extends Widget {
|
|
|
|
|
|
private _model: FileBrowserModel = null;
|
|
|
private _manager: DocumentManager = null;
|
|
|
- private _sessions: Session.IModel[] = null;
|
|
|
- private _sentinal = 'UNKNOWN_EXTENSION';
|
|
|
+ private _sentinel = 'UNKNOWN_EXTENSION';
|
|
|
private _prevExt = '';
|
|
|
private _extensions: string[] = [];
|
|
|
}
|
|
@@ -635,11 +625,17 @@ namespace Private {
|
|
|
node.disabled = true;
|
|
|
return;
|
|
|
}
|
|
|
+ // Bail if there are no kernel specs.
|
|
|
+ if (!specs) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
let preferredLanguage = preference.language;
|
|
|
node.disabled = false;
|
|
|
+
|
|
|
populateKernels(node,
|
|
|
{ specs, sessions, preferredLanguage, preferredKernel }
|
|
|
);
|
|
|
+
|
|
|
// Select the "null" valued kernel if we do not prefer a kernel.
|
|
|
if (!preference.preferKernel) {
|
|
|
node.value = 'null';
|
|
@@ -664,7 +660,7 @@ namespace Private {
|
|
|
/**
|
|
|
* The running sessions.
|
|
|
*/
|
|
|
- sessions: Session.IModel[];
|
|
|
+ sessions: IterableOrArrayLike<Session.IModel>;
|
|
|
|
|
|
/**
|
|
|
* The preferred kernel name.
|