##// END OF EJS Templates
store current kernel selection in frontend config...
Min RK -
Show More
@@ -1,144 +1,150 b''
1 1 // Copyright (c) IPython Development Team.
2 2 // Distributed under the terms of the Modified BSD License.
3 3
4 4 require([
5 5 'jquery',
6 6 'base/js/namespace',
7 7 'base/js/dialog',
8 8 'base/js/events',
9 9 'base/js/page',
10 10 'base/js/utils',
11 'services/config',
11 12 'contents',
12 13 'tree/js/notebooklist',
13 14 'tree/js/clusterlist',
14 15 'tree/js/sessionlist',
15 16 'tree/js/kernellist',
16 17 'tree/js/terminallist',
17 18 'tree/js/newnotebook',
18 19 'auth/js/loginwidget',
19 20 // only loaded, not used:
20 21 'jqueryui',
21 22 'bootstrap',
22 23 'custom/custom',
23 24 ], function(
24 25 $,
25 26 IPython,
26 27 dialog,
27 28 events,
28 29 page,
29 30 utils,
31 config,
30 32 contents_service,
31 33 notebooklist,
32 34 clusterlist,
33 35 sesssionlist,
34 36 kernellist,
35 37 terminallist,
36 38 newnotebook,
37 39 loginwidget){
38 40 "use strict";
39 41
40 42 page = new page.Page();
41 43
42 44 var common_options = {
43 45 base_url: utils.get_body_data("baseUrl"),
44 46 notebook_path: utils.get_body_data("notebookPath"),
45 47 };
48 var cfg = new config.ConfigSection('tree', common_options);
49 cfg.load();
50 common_options.config = cfg;
51
46 52 var session_list = new sesssionlist.SesssionList($.extend({
47 53 events: events},
48 54 common_options));
49 55 var contents = new contents_service.Contents($.extend({
50 56 events: events},
51 57 common_options));
52 58 var notebook_list = new notebooklist.NotebookList('#notebook_list', $.extend({
53 59 contents: contents,
54 60 session_list: session_list},
55 61 common_options));
56 62 var cluster_list = new clusterlist.ClusterList('#cluster_list', common_options);
57 63 var kernel_list = new kernellist.KernelList('#running_list', $.extend({
58 64 session_list: session_list},
59 65 common_options));
60 66
61 67 var terminal_list;
62 68 if (utils.get_body_data("terminalsAvailable") === "True") {
63 69 terminal_list = new terminallist.TerminalList('#terminal_list', common_options);
64 70 }
65 71
66 72 var login_widget = new loginwidget.LoginWidget('#login_widget', common_options);
67 73
68 74 var nnw = new newnotebook.NewNotebookWidget("#new-notebook-buttons",
69 75 $.extend(
70 76 {contents: contents},
71 77 common_options
72 78 )
73 79 );
74 80
75 81 var interval_id=0;
76 82 // auto refresh every xx secondes, no need to be fast,
77 83 // update is done at least when page get focus
78 84 var time_refresh = 60; // in sec
79 85
80 86 var enable_autorefresh = function(){
81 87 /**
82 88 *refresh immediately , then start interval
83 89 */
84 90 session_list.load_sessions();
85 91 cluster_list.load_list();
86 92 if (terminal_list) {
87 93 terminal_list.load_terminals();
88 94 }
89 95 if (!interval_id){
90 96 interval_id = setInterval(function(){
91 97 session_list.load_sessions();
92 98 cluster_list.load_list();
93 99 if (terminal_list) {
94 100 terminal_list.load_terminals();
95 101 }
96 102 }, time_refresh*1000);
97 103 }
98 104 };
99 105
100 106 var disable_autorefresh = function(){
101 107 clearInterval(interval_id);
102 108 interval_id = 0;
103 109 };
104 110
105 111 // stop autorefresh when page lose focus
106 112 $(window).blur(function() {
107 113 disable_autorefresh();
108 114 });
109 115
110 116 //re-enable when page get focus back
111 117 $(window).focus(function() {
112 118 enable_autorefresh();
113 119 });
114 120
115 121 // finally start it, it will refresh immediately
116 122 enable_autorefresh();
117 123
118 124 page.show();
119 125
120 126 // For backwards compatability.
121 127 IPython.page = page;
122 128 IPython.notebook_list = notebook_list;
123 129 IPython.cluster_list = cluster_list;
124 130 IPython.session_list = session_list;
125 131 IPython.kernel_list = kernel_list;
126 132 IPython.login_widget = login_widget;
127 133
128 134 events.trigger('app_initialized.DashboardApp');
129 135
130 136 // bound the upload method to the on change of the file select list
131 137 $("#alternate_upload").change(function (event){
132 138 notebook_list.handleFilesUpload(event,'form');
133 139 });
134 140
135 141 // set hash on tab click
136 142 $("#tabs").find("a").click(function() {
137 143 window.location.hash = $(this).attr("href");
138 144 });
139 145
140 146 // load tab if url hash
141 147 if (window.location.hash) {
142 148 $("#tabs").find("a[href=" + window.location.hash + "]").click();
143 149 }
144 150 });
@@ -1,143 +1,158 b''
1 1 // Copyright (c) IPython Development Team.
2 2 // Distributed under the terms of the Modified BSD License.
3 3
4 4 define([
5 5 'jquery',
6 6 'base/js/namespace',
7 7 'base/js/utils',
8 8 'base/js/dialog',
9 9 ], function ($, IPython, utils, dialog) {
10 10 "use strict";
11 11
12 12 var NewNotebookWidget = function (selector, options) {
13 13 this.selector = selector;
14 14 this.base_url = options.base_url;
15 15 this.notebook_path = options.notebook_path;
16 16 this.contents = options.contents;
17 17 this.current_selection = null;
18 this.config = options.config;
18 19 this.kernelspecs = {};
19 20 if (this.selector !== undefined) {
20 21 this.element = $(selector);
21 22 this.request_kernelspecs();
22 23 }
23 24 this.bind_events();
24 25 };
25 26
26 27 NewNotebookWidget.prototype.bind_events = function () {
27 28 var that = this;
28 29 this.element.find('#new_notebook').click(function () {
29 30 that.new_notebook();
30 31 });
31 32 };
32 33
33 34 NewNotebookWidget.prototype.request_kernelspecs = function () {
34 35 /** request and then load kernel specs */
35 36 var url = utils.url_join_encode(this.base_url, 'api/kernelspecs');
36 37 utils.promising_ajax(url).then($.proxy(this._load_kernelspecs, this));
37 38 };
38 39
39 40 NewNotebookWidget.prototype._load_kernelspecs = function (data) {
40 41 /** load kernelspec list */
42 var that = this;
41 43 this.kernelspecs = data.kernelspecs;
42 44 var menu = this.element.find("#new-notebook-menu");
43 45 var keys = Object.keys(data.kernelspecs).sort(function (a, b) {
44 46 var da = data.kernelspecs[a].display_name;
45 47 var db = data.kernelspecs[b].display_name;
46 48 if (da === db) {
47 49 return 0;
48 50 } else if (da > db) {
49 51 return 1;
50 52 } else {
51 53 return -1;
52 54 }
53 55 });
54 56 for (var i = 0; i < keys.length; i++) {
55 57 var ks = this.kernelspecs[keys[i]];
56 58 var li = $("<li>")
57 59 .attr("id", "kernel-" +ks.name)
58 60 .data('kernelspec', ks).append(
59 61 $('<a>').attr('href', '#').append($('<i>')
60 62 .addClass('kernel-menu-icon fa')
61 63 .attr('href', '#')
62 64 .click($.proxy(this.select_kernel, this, ks.name))
63 65 ).append($('<span>')
64 66 .attr('href', '#')
65 67 .click($.proxy(this.new_notebook, this, ks.name))
66 68 .text(ks.display_name)
67 69 .attr('title', 'Create a new notebook with ' + ks.display_name)
68 70 )
69 71 );
70 72 menu.append(li);
71 73 }
72 this._load_default_kernelspec(data['default']);
74 this.config.loaded.then(function () {
75 that._load_default_kernelspec(data['default']);
76 });
73 77 };
74 78
75 79 NewNotebookWidget.prototype._load_default_kernelspec = function (default_name) {
76 80 /** load default kernelspec name from localStorage, if defined */
77 this.select_kernel(localStorage.default_kernel_name || default_name);
81 if (this.config.data.NewNotebookWidget &&
82 this.config.data.NewNotebookWidget.current_selection &&
83 this.kernelspecs[this.config.data.NewNotebookWidget.current_selection] !== undefined
84 ) {
85 default_name = this.config.data.NewNotebookWidget.current_selection;
86 }
87 this.select_kernel(default_name);
78 88 };
79 89
80 90 NewNotebookWidget.prototype.select_kernel = function (kernel_name) {
81 91 /** select the current default kernel */
82 92 this.current_selection = kernel_name;
93 this.config.update({
94 NewNotebookWidget: {
95 current_selection: kernel_name
96 }
97 });
83 98 var spec = this.kernelspecs[kernel_name];
84 99 var display_name;
85 100 if (spec) {
86 101 display_name = spec.display_name;
87 102 localStorage.default_kernel_name = kernel_name;
88 103 this.element.find("#current-kernel").text(display_name);
89 104 } else {
90 105 display_name = 'default kernel';
91 106 delete localStorage.default_kernel_name;
92 107 }
93 108 this.element.find("#new_notebook").attr('title',
94 109 'Create a new notebook with ' + display_name
95 110 );
96 111 this.element.find("li").map(function (i, li) {
97 112 li = $(li);
98 113 var ks = li.data('kernelspec');
99 114 if (ks.name == kernel_name) {
100 115 li.find(".kernel-menu-icon")
101 116 .attr('title', display_name + ' is the default kernel')
102 117 .addClass("kernel-menu-icon-current");
103 118 } else {
104 119 li.find(".kernel-menu-icon")
105 120 .attr('title', 'Make ' + ks.display_name + ' the default kernel')
106 121 .removeClass("kernel-menu-icon-current");
107 122 }
108 123 });
109 124 };
110 125
111 126 NewNotebookWidget.prototype.new_with_kernel = function (kernel_name) {
112 127 /** record current selection and open a new notebook */
113 128 this.new_notebook(kernel_name);
114 129 };
115 130
116 131 NewNotebookWidget.prototype.new_notebook = function (kernel_name) {
117 132 /** create and open a new notebook */
118 133 var that = this;
119 134 kernel_name = kernel_name || this.current_selection;
120 135 var w = window.open();
121 136 this.contents.new_untitled(that.notebook_path, {type: "notebook"}).then(
122 137 function (data) {
123 138 var url = utils.url_join_encode(
124 139 that.base_url, 'notebooks', data.path
125 140 );
126 141 if (kernel_name) {
127 142 url += "?kernel_name=" + kernel_name;
128 143 }
129 144 w.location = url;
130 145 },
131 146 function (error) {
132 147 w.close();
133 148 dialog.modal({
134 149 title : 'Creating Notebook Failed',
135 150 body : "The error was: " + error.message,
136 151 buttons : {'OK' : {'class' : 'btn-primary'}}
137 152 });
138 153 }
139 154 );
140 155 };
141 156
142 157 return {'NewNotebookWidget': NewNotebookWidget};
143 158 });
General Comments 0
You need to be logged in to leave comments. Login now