##// END OF EJS Templates
Add scrollmanager
Jonathan Frederic -
Show More
@@ -0,0 +1,78 b''
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
3 define([], function(){
4 "use strict";
5
6 var ScrollManager = function (notebook) {
7 // Public constructor.
8 this.notebook = notebook;
9 };
10
11 ScrollManager.prototype.scroll = function (delta) {
12 // Scroll the document.
13 //
14 // Parameters
15 // ----------
16 // delta: integer
17 // direction to scroll the document. Positive is downwards.
18
19 // If one or more slides exist, scroll to the slide.
20 var $slide_cells = $('.slideshow-slide');
21 if ($slide_cells.length > 0) {
22 var i, cell;
23
24 // Get the active slide cell index.
25 var selected_index = this.notebook.find_cell_index(this.notebook.get_selected_cell());
26 var active_slide = -1;
27 var cells = this.notebook.get_cells();
28 for (i = selected_index; i >= 0; i--) {
29 cell = cells[i];
30 var ns = cell.metadata.slideshow;
31 if (ns && ns.slide_type == 'slide') {
32 active_slide = i;
33 break;
34 }
35 }
36
37 // Translate cell index into slide cell index.
38 if (active_slide != -1) {
39 for (i = 0; i < $slide_cells.length; i++) {
40 if (cells[active_slide].element[0] == $slide_cells[i]) {
41 active_slide = i;
42 break;
43 }
44 }
45 }
46
47 // Scroll.
48 if (active_slide != -1 || delta > 0) {
49 active_slide += delta;
50 active_slide = Math.max(0, Math.min($slide_cells.length-1, active_slide));
51
52 var cell_element = $slide_cells[active_slide];
53 cell = $(cell_element).data('cell');
54 this.notebook.select(this.notebook.find_cell_index(cell));
55
56 this.scroll_to(cell_element);
57 //cell_element.scrollIntoView(true);
58 }
59
60 // Cancel browser keyboard scroll.
61 return false;
62
63 // No slides exist, default browser scroll
64 } else {
65 return true;
66 }
67 };
68
69 ScrollManager.prototype.scroll_to = function(destination) {
70 $('html, body').animate({'scrollTop': element.offset().top}, 'slow', 'swing');
71 };
72
73 // For convinience, add the ScrollManager class to the global namespace
74 IPython.ScrollManager = ScrollManager;
75 // Return naemspace for require.js loads
76 return ScrollManager;
77
78 });
@@ -1,566 +1,581 b''
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
1 //----------------------------------------------------------------------------
2 // Copyright (C) 2011 The IPython Development Team
3 //
4 // Distributed under the terms of the BSD License. The full license is in
5 // the file COPYING, distributed as part of this software.
6 //----------------------------------------------------------------------------
7
8 //============================================================================
9 // Keyboard management
10 //============================================================================
3 11
4 define([
5 'base/js/namespace',
6 'jquery',
7 'base/js/utils',
8 'base/js/keyboard',
9 ], function(IPython, $, utils, keyboard) {
12 var IPython = (function (IPython) {
10 13 "use strict";
11 14
12 15 var browser = utils.browser[0];
13 16 var platform = utils.platform;
14 17
15 18 // Main keyboard manager for the notebook
16 19 var keycodes = keyboard.keycodes;
17 20
18 21 var KeyboardManager = function (options) {
19 22 // Constructor
20 23 //
21 24 // Parameters:
22 25 // options: dictionary
23 26 // Dictionary of keyword arguments.
24 27 // events: $(Events) instance
25 28 // pager: Pager instance
26 29 this.mode = 'command';
27 30 this.enabled = true;
28 31 this.pager = options.pager;
29 32 this.quick_help = undefined;
30 33 this.notebook = undefined;
31 34 this.bind_events();
32 35 this.command_shortcuts = new keyboard.ShortcutManager(undefined, options.events);
33 36 this.command_shortcuts.add_shortcuts(this.get_default_common_shortcuts());
34 37 this.command_shortcuts.add_shortcuts(this.get_default_command_shortcuts());
35 38 this.edit_shortcuts = new keyboard.ShortcutManager(undefined, options.events);
36 39 this.edit_shortcuts.add_shortcuts(this.get_default_common_shortcuts());
37 40 this.edit_shortcuts.add_shortcuts(this.get_default_edit_shortcuts());
38 41 };
39 42
40 43 KeyboardManager.prototype.get_default_common_shortcuts = function() {
41 44 var that = this;
42 45 var shortcuts = {
43 46 'shift' : {
44 47 help : '',
45 48 help_index : '',
46 49 handler : function (event) {
47 50 // ignore shift keydown
48 51 return true;
49 52 }
50 53 },
51 54 'shift-enter' : {
52 55 help : 'run cell, select below',
53 56 help_index : 'ba',
54 57 handler : function (event) {
55 58 that.notebook.execute_cell_and_select_below();
56 59 return false;
57 60 }
58 61 },
59 62 'ctrl-enter' : {
60 63 help : 'run cell',
61 64 help_index : 'bb',
62 65 handler : function (event) {
63 66 that.notebook.execute_cell();
64 67 return false;
65 68 }
66 69 },
67 70 'alt-enter' : {
68 71 help : 'run cell, insert below',
69 72 help_index : 'bc',
70 73 handler : function (event) {
71 74 that.notebook.execute_cell_and_insert_below();
72 75 return false;
73 76 }
74 77 }
75 78 };
76 79
77 80 if (platform === 'MacOS') {
78 81 shortcuts['cmd-s'] =
79 82 {
80 83 help : 'save notebook',
81 84 help_index : 'fb',
82 85 handler : function (event) {
83 86 that.notebook.save_checkpoint();
84 87 event.preventDefault();
85 88 return false;
86 89 }
87 90 };
88 91 } else {
89 92 shortcuts['ctrl-s'] =
90 93 {
91 94 help : 'save notebook',
92 95 help_index : 'fb',
93 96 handler : function (event) {
94 97 that.notebook.save_checkpoint();
95 98 event.preventDefault();
96 99 return false;
97 100 }
98 101 };
99 102 }
100 103 return shortcuts;
101 104 };
102 105
103 106 KeyboardManager.prototype.get_default_edit_shortcuts = function() {
104 107 var that = this;
105 108 return {
106 109 'esc' : {
107 110 help : 'command mode',
108 111 help_index : 'aa',
109 112 handler : function (event) {
110 113 that.notebook.command_mode();
111 114 return false;
112 115 }
113 116 },
114 117 'ctrl-m' : {
115 118 help : 'command mode',
116 119 help_index : 'ab',
117 120 handler : function (event) {
118 121 that.notebook.command_mode();
119 122 return false;
120 123 }
121 124 },
122 125 'up' : {
123 126 help : '',
124 127 help_index : '',
125 128 handler : function (event) {
126 129 var index = that.notebook.get_selected_index();
127 130 var cell = that.notebook.get_cell(index);
128 131 if (cell && cell.at_top() && index !== 0) {
129 132 event.preventDefault();
130 133 that.notebook.command_mode();
131 134 that.notebook.select_prev();
132 135 that.notebook.edit_mode();
133 136 var cm = that.notebook.get_selected_cell().code_mirror;
134 137 cm.setCursor(cm.lastLine(), 0);
135 138 return false;
136 139 } else if (cell) {
137 140 var cm = cell.code_mirror;
138 141 cm.execCommand('goLineUp');
139 142 return false;
140 143 }
141 144 }
142 145 },
143 146 'down' : {
144 147 help : '',
145 148 help_index : '',
146 149 handler : function (event) {
147 150 var index = that.notebook.get_selected_index();
148 151 var cell = that.notebook.get_cell(index);
149 152 if (cell.at_bottom() && index !== (that.notebook.ncells()-1)) {
150 153 event.preventDefault();
151 154 that.notebook.command_mode();
152 155 that.notebook.select_next();
153 156 that.notebook.edit_mode();
154 157 var cm = that.notebook.get_selected_cell().code_mirror;
155 158 cm.setCursor(0, 0);
156 159 return false;
157 160 } else {
158 161 var cm = cell.code_mirror;
159 162 cm.execCommand('goLineDown');
160 163 return false;
161 164 }
162 165 }
163 166 },
164 167 'ctrl-shift--' : {
165 168 help : 'split cell',
166 169 help_index : 'ea',
167 170 handler : function (event) {
168 171 that.notebook.split_cell();
169 172 return false;
170 173 }
171 174 },
172 175 'ctrl-shift-subtract' : {
173 176 help : '',
174 177 help_index : 'eb',
175 178 handler : function (event) {
176 179 that.notebook.split_cell();
177 180 return false;
178 181 }
179 182 },
180 183 };
181 184 };
182 185
183 186 KeyboardManager.prototype.get_default_command_shortcuts = function() {
184 187 var that = this;
185 188 return {
189 'space': {
190 help: "Scroll down to next H1 cell",
191 handler: function(event) {
192 return that.notebook.scrollmanager.scroll(1);
193 },
194 },
195 'shift-space': {
196 help: "Scroll up to previous H1 cell",
197 handler: function(event) {
198 return that.notebook.scrollmanager.scroll(-1);
199 },
200 },
186 201 'enter' : {
187 202 help : 'edit mode',
188 203 help_index : 'aa',
189 204 handler : function (event) {
190 205 that.notebook.edit_mode();
191 206 return false;
192 207 }
193 208 },
194 209 'up' : {
195 210 help : 'select previous cell',
196 211 help_index : 'da',
197 212 handler : function (event) {
198 213 var index = that.notebook.get_selected_index();
199 214 if (index !== 0 && index !== null) {
200 215 that.notebook.select_prev();
201 216 that.notebook.focus_cell();
202 217 }
203 218 return false;
204 219 }
205 220 },
206 221 'down' : {
207 222 help : 'select next cell',
208 223 help_index : 'db',
209 224 handler : function (event) {
210 225 var index = that.notebook.get_selected_index();
211 226 if (index !== (that.notebook.ncells()-1) && index !== null) {
212 227 that.notebook.select_next();
213 228 that.notebook.focus_cell();
214 229 }
215 230 return false;
216 231 }
217 232 },
218 233 'k' : {
219 234 help : 'select previous cell',
220 235 help_index : 'dc',
221 236 handler : function (event) {
222 237 var index = that.notebook.get_selected_index();
223 238 if (index !== 0 && index !== null) {
224 239 that.notebook.select_prev();
225 240 that.notebook.focus_cell();
226 241 }
227 242 return false;
228 243 }
229 244 },
230 245 'j' : {
231 246 help : 'select next cell',
232 247 help_index : 'dd',
233 248 handler : function (event) {
234 249 var index = that.notebook.get_selected_index();
235 250 if (index !== (that.notebook.ncells()-1) && index !== null) {
236 251 that.notebook.select_next();
237 252 that.notebook.focus_cell();
238 253 }
239 254 return false;
240 255 }
241 256 },
242 257 'x' : {
243 258 help : 'cut cell',
244 259 help_index : 'ee',
245 260 handler : function (event) {
246 261 that.notebook.cut_cell();
247 262 return false;
248 263 }
249 264 },
250 265 'c' : {
251 266 help : 'copy cell',
252 267 help_index : 'ef',
253 268 handler : function (event) {
254 269 that.notebook.copy_cell();
255 270 return false;
256 271 }
257 272 },
258 273 'shift-v' : {
259 274 help : 'paste cell above',
260 275 help_index : 'eg',
261 276 handler : function (event) {
262 277 that.notebook.paste_cell_above();
263 278 return false;
264 279 }
265 280 },
266 281 'v' : {
267 282 help : 'paste cell below',
268 283 help_index : 'eh',
269 284 handler : function (event) {
270 285 that.notebook.paste_cell_below();
271 286 return false;
272 287 }
273 288 },
274 289 'd' : {
275 290 help : 'delete cell (press twice)',
276 291 help_index : 'ej',
277 292 count: 2,
278 293 handler : function (event) {
279 294 that.notebook.delete_cell();
280 295 return false;
281 296 }
282 297 },
283 298 'a' : {
284 299 help : 'insert cell above',
285 300 help_index : 'ec',
286 301 handler : function (event) {
287 302 that.notebook.insert_cell_above();
288 303 that.notebook.select_prev();
289 304 that.notebook.focus_cell();
290 305 return false;
291 306 }
292 307 },
293 308 'b' : {
294 309 help : 'insert cell below',
295 310 help_index : 'ed',
296 311 handler : function (event) {
297 312 that.notebook.insert_cell_below();
298 313 that.notebook.select_next();
299 314 that.notebook.focus_cell();
300 315 return false;
301 316 }
302 317 },
303 318 'y' : {
304 319 help : 'to code',
305 320 help_index : 'ca',
306 321 handler : function (event) {
307 322 that.notebook.to_code();
308 323 return false;
309 324 }
310 325 },
311 326 'm' : {
312 327 help : 'to markdown',
313 328 help_index : 'cb',
314 329 handler : function (event) {
315 330 that.notebook.to_markdown();
316 331 return false;
317 332 }
318 333 },
319 334 'r' : {
320 335 help : 'to raw',
321 336 help_index : 'cc',
322 337 handler : function (event) {
323 338 that.notebook.to_raw();
324 339 return false;
325 340 }
326 341 },
327 342 '1' : {
328 343 help : 'to heading 1',
329 344 help_index : 'cd',
330 345 handler : function (event) {
331 346 that.notebook.to_heading(undefined, 1);
332 347 return false;
333 348 }
334 349 },
335 350 '2' : {
336 351 help : 'to heading 2',
337 352 help_index : 'ce',
338 353 handler : function (event) {
339 354 that.notebook.to_heading(undefined, 2);
340 355 return false;
341 356 }
342 357 },
343 358 '3' : {
344 359 help : 'to heading 3',
345 360 help_index : 'cf',
346 361 handler : function (event) {
347 362 that.notebook.to_heading(undefined, 3);
348 363 return false;
349 364 }
350 365 },
351 366 '4' : {
352 367 help : 'to heading 4',
353 368 help_index : 'cg',
354 369 handler : function (event) {
355 370 that.notebook.to_heading(undefined, 4);
356 371 return false;
357 372 }
358 373 },
359 374 '5' : {
360 375 help : 'to heading 5',
361 376 help_index : 'ch',
362 377 handler : function (event) {
363 378 that.notebook.to_heading(undefined, 5);
364 379 return false;
365 380 }
366 381 },
367 382 '6' : {
368 383 help : 'to heading 6',
369 384 help_index : 'ci',
370 385 handler : function (event) {
371 386 that.notebook.to_heading(undefined, 6);
372 387 return false;
373 388 }
374 389 },
375 390 'o' : {
376 391 help : 'toggle output',
377 392 help_index : 'gb',
378 393 handler : function (event) {
379 394 that.notebook.toggle_output();
380 395 return false;
381 396 }
382 397 },
383 398 'shift-o' : {
384 399 help : 'toggle output scrolling',
385 400 help_index : 'gc',
386 401 handler : function (event) {
387 402 that.notebook.toggle_output_scroll();
388 403 return false;
389 404 }
390 405 },
391 406 's' : {
392 407 help : 'save notebook',
393 408 help_index : 'fa',
394 409 handler : function (event) {
395 410 that.notebook.save_checkpoint();
396 411 return false;
397 412 }
398 413 },
399 414 'ctrl-j' : {
400 415 help : 'move cell down',
401 416 help_index : 'eb',
402 417 handler : function (event) {
403 418 that.notebook.move_cell_down();
404 419 return false;
405 420 }
406 421 },
407 422 'ctrl-k' : {
408 423 help : 'move cell up',
409 424 help_index : 'ea',
410 425 handler : function (event) {
411 426 that.notebook.move_cell_up();
412 427 return false;
413 428 }
414 429 },
415 430 'l' : {
416 431 help : 'toggle line numbers',
417 432 help_index : 'ga',
418 433 handler : function (event) {
419 434 that.notebook.cell_toggle_line_numbers();
420 435 return false;
421 436 }
422 437 },
423 438 'i' : {
424 439 help : 'interrupt kernel (press twice)',
425 440 help_index : 'ha',
426 441 count: 2,
427 442 handler : function (event) {
428 443 that.notebook.kernel.interrupt();
429 444 return false;
430 445 }
431 446 },
432 447 '0' : {
433 448 help : 'restart kernel (press twice)',
434 449 help_index : 'hb',
435 450 count: 2,
436 451 handler : function (event) {
437 452 that.notebook.restart_kernel();
438 453 return false;
439 454 }
440 455 },
441 456 'h' : {
442 457 help : 'keyboard shortcuts',
443 458 help_index : 'ge',
444 459 handler : function (event) {
445 460 that.quick_help.show_keyboard_shortcuts();
446 461 return false;
447 462 }
448 463 },
449 464 'z' : {
450 465 help : 'undo last delete',
451 466 help_index : 'ei',
452 467 handler : function (event) {
453 468 that.notebook.undelete_cell();
454 469 return false;
455 470 }
456 471 },
457 472 'shift-m' : {
458 473 help : 'merge cell below',
459 474 help_index : 'ek',
460 475 handler : function (event) {
461 476 that.notebook.merge_cell_below();
462 477 return false;
463 478 }
464 479 },
465 480 'q' : {
466 481 help : 'close pager',
467 482 help_index : 'gd',
468 483 handler : function (event) {
469 484 that.pager.collapse();
470 485 return false;
471 486 }
472 487 },
473 488 };
474 489 };
475 490
476 491 KeyboardManager.prototype.bind_events = function () {
477 492 var that = this;
478 493 $(document).keydown(function (event) {
479 494 return that.handle_keydown(event);
480 495 });
481 496 };
482 497
483 498 KeyboardManager.prototype.handle_keydown = function (event) {
484 499 var notebook = this.notebook;
485 500
486 501 if (event.which === keycodes.esc) {
487 502 // Intercept escape at highest level to avoid closing
488 503 // websocket connection with firefox
489 504 event.preventDefault();
490 505 }
491 506
492 507 if (!this.enabled) {
493 508 if (event.which === keycodes.esc) {
494 509 // ESC
495 510 notebook.command_mode();
496 511 return false;
497 512 }
498 513 return true;
499 514 }
500 515
501 516 if (this.mode === 'edit') {
502 517 return this.edit_shortcuts.call_handler(event);
503 518 } else if (this.mode === 'command') {
504 519 return this.command_shortcuts.call_handler(event);
505 520 }
506 521 return true;
507 522 };
508 523
509 524 KeyboardManager.prototype.edit_mode = function () {
510 525 this.last_mode = this.mode;
511 526 this.mode = 'edit';
512 527 };
513 528
514 529 KeyboardManager.prototype.command_mode = function () {
515 530 this.last_mode = this.mode;
516 531 this.mode = 'command';
517 532 };
518 533
519 534 KeyboardManager.prototype.enable = function () {
520 535 this.enabled = true;
521 536 };
522 537
523 538 KeyboardManager.prototype.disable = function () {
524 539 this.enabled = false;
525 540 };
526 541
527 542 KeyboardManager.prototype.register_events = function (e) {
528 543 var that = this;
529 544 var handle_focus = function () {
530 545 that.disable();
531 546 };
532 547 var handle_blur = function () {
533 548 that.enable();
534 549 };
535 550 e.on('focusin', handle_focus);
536 551 e.on('focusout', handle_blur);
537 552 // TODO: Very strange. The focusout event does not seem fire for the
538 553 // bootstrap textboxes on FF25&26... This works around that by
539 554 // registering focus and blur events recursively on all inputs within
540 555 // registered element.
541 556 e.find('input').blur(handle_blur);
542 557 e.on('DOMNodeInserted', function (event) {
543 558 var target = $(event.target);
544 559 if (target.is('input')) {
545 560 target.blur(handle_blur);
546 561 } else {
547 562 target.find('input').blur(handle_blur);
548 563 }
549 564 });
550 565 // There are times (raw_input) where we remove the element from the DOM before
551 566 // focusout is called. In this case we bind to the remove event of jQueryUI,
552 567 // which gets triggered upon removal, iff it is focused at the time.
553 568 // is_focused must be used to check for the case where an element within
554 569 // the element being removed is focused.
555 570 e.on('remove', function () {
556 571 if (utils.is_focused(e[0])) {
557 572 that.enable();
558 573 }
559 574 });
560 575 };
561 576
562 577 // For backwards compatability.
563 578 IPython.KeyboardManager = KeyboardManager;
564 579
565 580 return {'KeyboardManager': KeyboardManager};
566 581 });
@@ -1,139 +1,143 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 'base/js/namespace',
6 6 'jquery',
7 7 'notebook/js/notebook',
8 8 'base/js/utils',
9 9 'base/js/page',
10 10 'notebook/js/layoutmanager',
11 11 'base/js/events',
12 12 'auth/js/loginwidget',
13 13 'notebook/js/maintoolbar',
14 14 'notebook/js/pager',
15 15 'notebook/js/quickhelp',
16 16 'notebook/js/menubar',
17 17 'notebook/js/notificationarea',
18 18 'notebook/js/savewidget',
19 19 'notebook/js/keyboardmanager',
20 20 'notebook/js/config',
21 21 'notebook/js/kernelselector',
22 'notebook/js/scrollmanager'
22 23 // only loaded, not used:
23 24 'custom/custom',
24 25 ], function(
25 26 IPython,
26 27 $,
27 28 notebook,
28 29 utils,
29 30 page,
30 31 layoutmanager,
31 32 events,
32 33 loginwidget,
33 34 maintoolbar,
34 35 pager,
35 36 quickhelp,
36 37 menubar,
37 38 notificationarea,
38 39 savewidget,
39 40 keyboardmanager,
40 41 config,
41 kernelselector
42 kernelselector,
43 scrollmanager
42 44 ) {
43 45 "use strict";
44 46
45 47 var common_options = {
46 48 base_url : utils.get_body_data("baseUrl"),
47 49 ws_url : IPython.utils.get_body_data("wsUrl"),
48 50 notebook_path : utils.get_body_data("notebookPath"),
49 51 notebook_name : utils.get_body_data('notebookName')
50 52 };
51 53
52 54 var user_config = $.extend({}, config.default_config);
53 55 var page = new page.Page();
54 56 var layout_manager = new layoutmanager.LayoutManager();
55 57 var pager = new pager.Pager('div#pager', 'div#pager_splitter', {
56 58 layout_manager: layout_manager,
57 59 events: events});
58 60 var keyboard_manager = new keyboardmanager.KeyboardManager({
59 61 pager: pager,
60 62 events: events});
61 63 var save_widget = new savewidget.SaveWidget('span#save_widget', {
62 64 events: events,
63 65 keyboard_manager: keyboard_manager});
64 66 var notebook = new notebook.Notebook('div#notebook', $.extend({
65 67 events: events,
66 68 keyboard_manager: keyboard_manager,
67 69 save_widget: save_widget,
68 70 config: user_config},
69 71 common_options));
72 var scrollmanager = new scrollmanager.ScrollManager(notebook);
70 73 var login_widget = new loginwidget.LoginWidget('span#login_widget', common_options);
71 74 var toolbar = new maintoolbar.MainToolBar('#maintoolbar-container', {
72 75 notebook: notebook,
73 76 events: events});
74 77 var quick_help = new quickhelp.QuickHelp({
75 78 keyboard_manager: keyboard_manager,
76 79 events: events,
77 80 notebook: notebook});
78 81 var menubar = new menubar.MenuBar('#menubar', $.extend({
79 82 notebook: notebook,
80 83 layout_manager: layout_manager,
81 84 events: events,
82 85 save_widget: save_widget,
83 86 quick_help: quick_help},
84 87 common_options));
85 88 var notification_area = new notificationarea.NotificationArea(
86 89 '#notification_area', {
87 90 events: events,
88 91 save_widget: save_widget,
89 92 notebook: notebook,
90 93 keyboard_manager: keyboard_manager});
91 94 notification_area.init_notification_widgets();
92 95 var kernel_selector = new kernelselector.KernelSelector(
93 96 '#kernel_selector_widget', notebook);
94 97
95 98 $('body').append('<div id="fonttest"><pre><span id="test1">x</span>'+
96 99 '<span id="test2" style="font-weight: bold;">x</span>'+
97 100 '<span id="test3" style="font-style: italic;">x</span></pre></div>');
98 101 var nh = $('#test1').innerHeight();
99 102 var bh = $('#test2').innerHeight();
100 103 var ih = $('#test3').innerHeight();
101 104 if(nh != bh || nh != ih) {
102 105 $('head').append('<style>.CodeMirror span { vertical-align: bottom; }</style>');
103 106 }
104 107 $('#fonttest').remove();
105 108
106 109 page.show();
107 110
108 111 layout_manager.do_resize();
109 112 var first_load = function () {
110 113 layout_manager.do_resize();
111 114 var hash = document.location.hash;
112 115 if (hash) {
113 116 document.location.hash = '';
114 117 document.location.hash = hash;
115 118 }
116 119 notebook.set_autosave_interval(notebook.minimum_autosave_interval);
117 120 // only do this once
118 121 events.off('notebook_loaded.Notebook', first_load);
119 122 };
120 123 events.on('notebook_loaded.Notebook', first_load);
121 124
122 125 IPython.page = page;
123 126 IPython.layout_manager = layout_manager;
124 127 IPython.notebook = notebook;
125 128 IPython.pager = pager;
126 129 IPython.quick_help = quick_help;
127 130 IPython.login_widget = login_widget;
128 131 IPython.menubar = menubar;
129 132 IPython.toolbar = toolbar;
130 133 IPython.notification_area = notification_area;
131 134 IPython.keyboard_manager = keyboard_manager;
132 135 IPython.save_widget = save_widget;
133 136 IPython.config = user_config;
134 137 IPython.tooltip = notebook.tooltip;
138 IPython.scrollmanager = scrollmanager;
135 139
136 140 events.trigger('app_initialized.NotebookApp');
137 141 notebook.load_notebook(common_options.notebook_name, common_options.notebook_path);
138 142
139 143 });
General Comments 0
You need to be logged in to leave comments. Login now