newnotebook.js
135 lines
| 4.8 KiB
| application/javascript
|
JavascriptLexer
Min RK
|
r19260 | // Copyright (c) IPython Development Team. | ||
// Distributed under the terms of the Modified BSD License. | ||||
define([ | ||||
'jquery', | ||||
'base/js/namespace', | ||||
'base/js/utils', | ||||
'base/js/dialog', | ||||
], function ($, IPython, utils, dialog) { | ||||
"use strict"; | ||||
var NewNotebookWidget = function (selector, options) { | ||||
this.selector = selector; | ||||
this.base_url = options.base_url; | ||||
this.notebook_path = options.notebook_path; | ||||
this.contents = options.contents; | ||||
Min RK
|
r19271 | this.default_kernel = null; | ||
Min RK
|
r19264 | this.config = options.config; | ||
Min RK
|
r19260 | this.kernelspecs = {}; | ||
if (this.selector !== undefined) { | ||||
this.element = $(selector); | ||||
this.request_kernelspecs(); | ||||
} | ||||
this.bind_events(); | ||||
}; | ||||
NewNotebookWidget.prototype.bind_events = function () { | ||||
var that = this; | ||||
this.element.find('#new_notebook').click(function () { | ||||
that.new_notebook(); | ||||
}); | ||||
}; | ||||
NewNotebookWidget.prototype.request_kernelspecs = function () { | ||||
/** request and then load kernel specs */ | ||||
var url = utils.url_join_encode(this.base_url, 'api/kernelspecs'); | ||||
utils.promising_ajax(url).then($.proxy(this._load_kernelspecs, this)); | ||||
}; | ||||
NewNotebookWidget.prototype._load_kernelspecs = function (data) { | ||||
/** load kernelspec list */ | ||||
Min RK
|
r19264 | var that = this; | ||
Min RK
|
r19263 | this.kernelspecs = data.kernelspecs; | ||
Min RK
|
r19260 | var menu = this.element.find("#new-notebook-menu"); | ||
Min RK
|
r19263 | var keys = Object.keys(data.kernelspecs).sort(function (a, b) { | ||
var da = data.kernelspecs[a].display_name; | ||||
var db = data.kernelspecs[b].display_name; | ||||
if (da === db) { | ||||
return 0; | ||||
} else if (da > db) { | ||||
return 1; | ||||
} else { | ||||
return -1; | ||||
} | ||||
}); | ||||
for (var i = 0; i < keys.length; i++) { | ||||
var ks = this.kernelspecs[keys[i]]; | ||||
Min RK
|
r19262 | var li = $("<li>") | ||
.attr("id", "kernel-" +ks.name) | ||||
.data('kernelspec', ks).append( | ||||
Min RK
|
r19265 | $('<a>') | ||
Min RK
|
r19262 | .attr('href', '#') | ||
.click($.proxy(this.new_notebook, this, ks.name)) | ||||
.text(ks.display_name) | ||||
.attr('title', 'Create a new notebook with ' + ks.display_name) | ||||
Min RK
|
r19265 | ); | ||
Min RK
|
r19262 | menu.append(li); | ||
Min RK
|
r19260 | } | ||
Min RK
|
r19264 | this.config.loaded.then(function () { | ||
that._load_default_kernelspec(data['default']); | ||||
}); | ||||
Min RK
|
r19260 | }; | ||
Min RK
|
r19263 | NewNotebookWidget.prototype._load_default_kernelspec = function (default_name) { | ||
Min RK
|
r19265 | /** load default kernelspec name from config, if defined */ | ||
Min RK
|
r19264 | if (this.config.data.NewNotebookWidget && | ||
Min RK
|
r19271 | this.config.data.NewNotebookWidget.default_kernel && | ||
this.kernelspecs[this.config.data.NewNotebookWidget.default_kernel] !== undefined | ||||
Min RK
|
r19264 | ) { | ||
Min RK
|
r19271 | default_name = this.config.data.NewNotebookWidget.default_kernel; | ||
Min RK
|
r19264 | } | ||
Min RK
|
r19265 | this.set_default_kernel(default_name); | ||
Min RK
|
r19260 | }; | ||
Min RK
|
r19265 | NewNotebookWidget.prototype.set_default_kernel = function (kernel_name) { | ||
Min RK
|
r19260 | /** select the current default kernel */ | ||
Min RK
|
r19271 | this.default_kernel = kernel_name; | ||
Min RK
|
r19264 | this.config.update({ | ||
NewNotebookWidget: { | ||||
Min RK
|
r19271 | default_kernel: kernel_name | ||
Min RK
|
r19264 | } | ||
}); | ||||
Min RK
|
r19260 | var spec = this.kernelspecs[kernel_name]; | ||
var display_name; | ||||
if (spec) { | ||||
display_name = spec.display_name; | ||||
Min RK
|
r19267 | this.element.find("#current-kernel") | ||
.text(display_name) | ||||
.attr('title', display_name + " is the default kernel for new notebooks"); | ||||
Min RK
|
r19260 | } else { | ||
display_name = 'default kernel'; | ||||
} | ||||
this.element.find("#new_notebook").attr('title', | ||||
'Create a new notebook with ' + display_name | ||||
); | ||||
}; | ||||
NewNotebookWidget.prototype.new_notebook = function (kernel_name) { | ||||
/** create and open a new notebook */ | ||||
var that = this; | ||||
Min RK
|
r19271 | kernel_name = kernel_name || this.default_kernel; | ||
Min RK
|
r19260 | var w = window.open(); | ||
this.contents.new_untitled(that.notebook_path, {type: "notebook"}).then( | ||||
function (data) { | ||||
var url = utils.url_join_encode( | ||||
that.base_url, 'notebooks', data.path | ||||
); | ||||
if (kernel_name) { | ||||
url += "?kernel_name=" + kernel_name; | ||||
} | ||||
w.location = url; | ||||
}, | ||||
function (error) { | ||||
w.close(); | ||||
dialog.modal({ | ||||
title : 'Creating Notebook Failed', | ||||
body : "The error was: " + error.message, | ||||
buttons : {'OK' : {'class' : 'btn-primary'}} | ||||
}); | ||||
} | ||||
); | ||||
}; | ||||
return {'NewNotebookWidget': NewNotebookWidget}; | ||||
}); | ||||