##// END OF EJS Templates
add some checkpoint messages to the notification area
MinRK -
Show More
@@ -1,188 +1,213 b''
1 1 //----------------------------------------------------------------------------
2 2 // Copyright (C) 2012 The IPython Development Team
3 3 //
4 4 // Distributed under the terms of the BSD License. The full license is in
5 5 // the file COPYING, distributed as part of this software.
6 6 //----------------------------------------------------------------------------
7 7
8 8 //============================================================================
9 9 // Notification widget
10 10 //============================================================================
11 11
12 12 var IPython = (function (IPython) {
13 13 "use strict";
14 14 var utils = IPython.utils;
15 15
16 16
17 17 var NotificationArea = function (selector) {
18 18 this.selector = selector;
19 19 if (this.selector !== undefined) {
20 20 this.element = $(selector);
21 21 }
22 22 this.widget_dict = {};
23 23 };
24 24
25 25 NotificationArea.prototype.temp_message = function (msg, timeout, css_class) {
26 26 var uuid = utils.uuid();
27 27 if( css_class == 'danger') {css_class = 'ui-state-error';}
28 28 if( css_class == 'warning') {css_class = 'ui-state-highlight';}
29 29 var tdiv = $('<div>')
30 30 .attr('id',uuid)
31 31 .addClass('notification_widget ui-widget ui-widget-content ui-corner-all')
32 32 .addClass('border-box-sizing')
33 33 .addClass(css_class)
34 34 .hide()
35 35 .text(msg);
36 36
37 37 $(this.selector).append(tdiv);
38 38 var tmout = Math.max(1500,(timeout||1500));
39 39 tdiv.fadeIn(100);
40 40
41 41 setTimeout(function () {
42 42 tdiv.fadeOut(100, function () {tdiv.remove();});
43 43 }, tmout);
44 44 };
45 45
46 46 NotificationArea.prototype.widget = function(name) {
47 47 if(this.widget_dict[name] == undefined) {
48 48 return this.new_notification_widget(name);
49 49 }
50 50 return this.get_widget(name);
51 51 };
52 52
53 53 NotificationArea.prototype.get_widget = function(name) {
54 54 if(this.widget_dict[name] == undefined) {
55 55 throw('no widgets with this name');
56 56 }
57 57 return this.widget_dict[name];
58 58 };
59 59
60 60 NotificationArea.prototype.new_notification_widget = function(name) {
61 61 if(this.widget_dict[name] != undefined) {
62 62 throw('widget with that name already exists ! ');
63 63 }
64 64 var div = $('<div/>').attr('id','notification_'+name);
65 65 $(this.selector).append(div);
66 66 this.widget_dict[name] = new IPython.NotificationWidget('#notification_'+name);
67 67 return this.widget_dict[name];
68 68 };
69 69
70 70 NotificationArea.prototype.init_notification_widgets = function() {
71 71 var knw = this.new_notification_widget('kernel');
72 72
73 73 // Kernel events
74 74 $([IPython.events]).on('status_idle.Kernel',function () {
75 75 IPython.save_widget.update_document_title();
76 76 knw.set_message('Kernel Idle',200);
77 77 }
78 78 );
79 79
80 80 $([IPython.events]).on('status_busy.Kernel',function () {
81 81 window.document.title='(Busy) '+window.document.title;
82 82 knw.set_message("Kernel busy");
83 83 });
84 84
85 85 $([IPython.events]).on('status_restarting.Kernel',function () {
86 86 IPython.save_widget.update_document_title();
87 87 knw.set_message("Restarting kernel", 2000);
88 88 });
89 89
90 90 $([IPython.events]).on('status_interrupting.Kernel',function () {
91 91 knw.set_message("Interrupting kernel");
92 92 });
93 93
94 94 $([IPython.events]).on('status_dead.Kernel',function () {
95 95 var dialog = $('<div/>');
96 96 dialog.html('The kernel has died, and the automatic restart has failed.' +
97 97 ' It is possible the kernel cannot be restarted.' +
98 98 ' If you are not able to restart the kernel, you will still be able to save' +
99 99 ' the notebook, but running code will no longer work until the notebook' +
100 100 ' is reopened.'
101 101 );
102 102 $(document).append(dialog);
103 103 dialog.dialog({
104 104 resizable: false,
105 105 modal: true,
106 106 title: "Dead kernel",
107 107 close: function(event, ui) {$(this).dialog('destroy').remove();},
108 108 buttons : {
109 109 "Manual Restart": function () {
110 110 $([IPython.events]).trigger('status_restarting.Kernel');
111 111 IPython.notebook.start_kernel();
112 112 $(this).dialog('close');
113 113 },
114 114 "Don't restart": function () {
115 115 $(this).dialog('close');
116 116 }
117 117 }
118 118 });
119 119 });
120 120
121 121 $([IPython.events]).on('websocket_closed.Kernel', function (event, data) {
122 122 var kernel = data.kernel;
123 123 var ws_url = data.ws_url;
124 124 var early = data.early;
125 125 var msg;
126 126 if (!early) {
127 127 knw.set_message('Reconnecting WebSockets', 1000);
128 128 setTimeout(function () {
129 129 kernel.start_channels();
130 130 }, 5000);
131 131 return;
132 132 }
133 133 console.log('WebSocket connection failed: ', ws_url)
134 134 msg = "A WebSocket connection to could not be established." +
135 135 " You will NOT be able to run code. Check your" +
136 136 " network connection or notebook server configuration.";
137 137 var dialog = $('<div/>');
138 138 dialog.html(msg);
139 139 $(document).append(dialog);
140 140 dialog.dialog({
141 141 resizable: false,
142 142 modal: true,
143 143 title: "WebSocket connection failed",
144 144 closeText: "",
145 145 close: function(event, ui) {$(this).dialog('destroy').remove();},
146 146 buttons : {
147 147 "OK": function () {
148 148 $(this).dialog('close');
149 149 },
150 150 "Reconnect": function () {
151 151 knw.set_message('Reconnecting WebSockets', 1000);
152 152 setTimeout(function () {
153 153 kernel.start_channels();
154 154 }, 5000);
155 155 $(this).dialog('close');
156 156 }
157 157 }
158 158 });
159 159 });
160 160
161 161
162 162 var nnw = this.new_notification_widget('notebook');
163 163
164 164 // Notebook events
165 165 $([IPython.events]).on('notebook_loading.Notebook', function () {
166 166 nnw.set_message("Loading notebook",500);
167 167 });
168 168 $([IPython.events]).on('notebook_loaded.Notebook', function () {
169 169 nnw.set_message("Notebook loaded",500);
170 170 });
171 171 $([IPython.events]).on('notebook_saving.Notebook', function () {
172 172 nnw.set_message("Saving notebook",500);
173 173 });
174 174 $([IPython.events]).on('notebook_saved.Notebook', function () {
175 175 nnw.set_message("Notebook saved",2000);
176 176 });
177 177 $([IPython.events]).on('notebook_save_failed.Notebook', function () {
178 178 nnw.set_message("Notebook save failed");
179 179 });
180
181 // Checkpoint events
182 $([IPython.events]).on('checkpoint_created.Notebook', function (evt, data) {
183 var msg = "Checkpoint created";
184 if (data.last_modified) {
185 var d = new Date(data.last_modified);
186 msg = msg + ": " + d.format("HH:MM:ss");
187 }
188 nnw.set_message(msg, 2000);
189 });
190 $([IPython.events]).on('checkpoint_failed.Notebook', function () {
191 nnw.set_message("Checkpoint failed");
192 });
193 $([IPython.events]).on('checkpoint_deleted.Notebook', function () {
194 nnw.set_message("Checkpoint deleted", 500);
195 });
196 $([IPython.events]).on('checkpoint_delete_failed.Notebook', function () {
197 nnw.set_message("Checkpoint delete failed");
198 });
199 $([IPython.events]).on('checkpoint_restoring.Notebook', function () {
200 nnw.set_message("Restoring to checkpoint...", 500);
201 });
202 $([IPython.events]).on('checkpoint_restore_failed.Notebook', function () {
203 nnw.set_message("Checkpoint restore failed");
204 });
180 205
181 206 };
182 207
183 208 IPython.NotificationArea = NotificationArea;
184 209
185 210 return IPython;
186 211
187 212 }(IPython));
188 213
General Comments 0
You need to be logged in to leave comments. Login now