##// END OF EJS Templates
Allow switching kernel from the notebook UI
Thomas Kluyver -
Show More
@@ -0,0 +1,58 b''
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
3
4 define([
5 'base/js/namespace',
6 'jquery',
7 'base/js/utils',
8 ], function(IPython, $, utils) {
9 "use strict";
10
11 var KernelSelector = function(selector, notebook) {
12 this.selector = selector;
13 this.notebook = notebook;
14 this.kernelspecs = {};
15 this.current = "python";
16 if (this.selector !== undefined) {
17 this.element = $(selector);
18 this.style();
19 this.request_kernelspecs();
20 }
21 };
22
23 KernelSelector.prototype.style = function() {
24 };
25
26 KernelSelector.prototype.request_kernelspecs = function() {
27 var url = utils.url_join_encode(this.notebook.base_url, 'api/kernelspecs');
28 $.ajax(url, {success: $.proxy(this.got_kernelspecs, this)});
29 };
30
31 KernelSelector.prototype.got_kernelspecs = function(data, status, xhr) {
32 this.kernelspecs = {};
33 var menu = this.element.find("#kernel_selector");
34 for (var i = 0; i < data.length; i++) {
35 var ks = data[i];
36 this.kernelspecs[ks.name] = ks;
37 var ksentry = $("<li>").attr("id", "kernel-" +ks.name).append($('<a>')
38 .attr('href', '#')
39 .click($.proxy(this.change_kernel, this, ks.name))
40 .text(ks.display_name));
41 menu.append(ksentry);
42 }
43 };
44
45 KernelSelector.prototype.change_kernel = function(kernel_name) {
46 console.log("change_kernel " + kernel_name + " from " + this.current);
47 if (kernel_name === this.current) {
48 return;
49 }
50 this.notebook.session.delete();
51 this.notebook.start_session(kernel_name);
52 this.current = kernel_name;
53 var display_name = this.kernelspecs[kernel_name].display_name;
54 this.element.find("#current_kernel_spec").text(display_name);
55 };
56
57 return {'KernelSelector': KernelSelector};
58 });
@@ -18,6 +18,7 b' require(['
18 'notebook/js/savewidget',
18 'notebook/js/savewidget',
19 'notebook/js/keyboardmanager',
19 'notebook/js/keyboardmanager',
20 'notebook/js/config',
20 'notebook/js/config',
21 'notebook/js/kernelselector',
21 // only loaded, not used:
22 // only loaded, not used:
22 'custom/custom',
23 'custom/custom',
23 ], function(
24 ], function(
@@ -36,7 +37,8 b' require(['
36 notificationarea,
37 notificationarea,
37 savewidget,
38 savewidget,
38 keyboardmanager,
39 keyboardmanager,
39 config
40 config,
41 kernelselector
40 ) {
42 ) {
41 "use strict";
43 "use strict";
42
44
@@ -90,6 +92,8 b' require(['
90 notebook: notebook,
92 notebook: notebook,
91 keyboard_manager: keyboard_manager});
93 keyboard_manager: keyboard_manager});
92 notification_area.init_notification_widgets();
94 notification_area.init_notification_widgets();
95 var kernel_selector = new kernelselector.KernelSelector(
96 '#kernel_selector_widget', notebook);
93
97
94 $('body').append('<div id="fonttest"><pre><span id="test1">x</span>'+
98 $('body').append('<div id="fonttest"><pre><span id="test1">x</span>'+
95 '<span id="test2" style="font-weight: bold;">x</span>'+
99 '<span id="test2" style="font-weight: bold;">x</span>'+
@@ -1496,7 +1496,11 b' define(['
1496 *
1496 *
1497 * @method start_session
1497 * @method start_session
1498 */
1498 */
1499 Notebook.prototype.start_session = function () {
1499 Notebook.prototype.start_session = function (kernel_name) {
1500 if (kernel_name === undefined) {
1501 kernel_name = this.default_kernel_name;
1502 }
1503 console.log("start_session", kernel_name);
1500 this.session = new session.Session({
1504 this.session = new session.Session({
1501 base_url: this.base_url,
1505 base_url: this.base_url,
1502 ws_url: this.ws_url,
1506 ws_url: this.ws_url,
@@ -1505,7 +1509,7 b' define(['
1505 // For now, create all sessions with the 'python' kernel, which is the
1509 // For now, create all sessions with the 'python' kernel, which is the
1506 // default. Later, the user will be able to select kernels. This is
1510 // default. Later, the user will be able to select kernels. This is
1507 // overridden if KernelManager.kernel_cmd is specified for the server.
1511 // overridden if KernelManager.kernel_cmd is specified for the server.
1508 kernel_name: this.default_kernel_name,
1512 kernel_name: kernel_name,
1509 notebook: this});
1513 notebook: this});
1510
1514
1511 this.session.start($.proxy(this._session_started, this));
1515 this.session.start($.proxy(this._session_started, this));
@@ -40,6 +40,12 b' class="notebook_app"'
40 <span id="autosave_status"></span>
40 <span id="autosave_status"></span>
41 </span>
41 </span>
42
42
43 <span id="kernel_selector_widget" class="nav pull-right">
44 <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="current_kernel_spec">Python</a>
45 <ul id="kernel_selector" class="dropdown-menu">
46 </ul>
47 </span>
48
43 {% endblock %}
49 {% endblock %}
44
50
45
51
General Comments 0
You need to be logged in to leave comments. Login now