##// 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,12 +1,15 b''
1 // Copyright (c) IPython Development Team.
1 //----------------------------------------------------------------------------
2 // Distributed under the terms of the Modified BSD License.
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([
12 var IPython = (function (IPython) {
5 'base/js/namespace',
6 'jquery',
7 'base/js/utils',
8 'base/js/keyboard',
9 ], function(IPython, $, utils, keyboard) {
10 "use strict";
13 "use strict";
11
14
12 var browser = utils.browser[0];
15 var browser = utils.browser[0];
@@ -183,6 +186,18 b' define(['
183 KeyboardManager.prototype.get_default_command_shortcuts = function() {
186 KeyboardManager.prototype.get_default_command_shortcuts = function() {
184 var that = this;
187 var that = this;
185 return {
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 'enter' : {
201 'enter' : {
187 help : 'edit mode',
202 help : 'edit mode',
188 help_index : 'aa',
203 help_index : 'aa',
@@ -19,6 +19,7 b' require(['
19 'notebook/js/keyboardmanager',
19 'notebook/js/keyboardmanager',
20 'notebook/js/config',
20 'notebook/js/config',
21 'notebook/js/kernelselector',
21 'notebook/js/kernelselector',
22 'notebook/js/scrollmanager'
22 // only loaded, not used:
23 // only loaded, not used:
23 'custom/custom',
24 'custom/custom',
24 ], function(
25 ], function(
@@ -38,7 +39,8 b' require(['
38 savewidget,
39 savewidget,
39 keyboardmanager,
40 keyboardmanager,
40 config,
41 config,
41 kernelselector
42 kernelselector,
43 scrollmanager
42 ) {
44 ) {
43 "use strict";
45 "use strict";
44
46
@@ -67,6 +69,7 b' require(['
67 save_widget: save_widget,
69 save_widget: save_widget,
68 config: user_config},
70 config: user_config},
69 common_options));
71 common_options));
72 var scrollmanager = new scrollmanager.ScrollManager(notebook);
70 var login_widget = new loginwidget.LoginWidget('span#login_widget', common_options);
73 var login_widget = new loginwidget.LoginWidget('span#login_widget', common_options);
71 var toolbar = new maintoolbar.MainToolBar('#maintoolbar-container', {
74 var toolbar = new maintoolbar.MainToolBar('#maintoolbar-container', {
72 notebook: notebook,
75 notebook: notebook,
@@ -132,6 +135,7 b' require(['
132 IPython.save_widget = save_widget;
135 IPython.save_widget = save_widget;
133 IPython.config = user_config;
136 IPython.config = user_config;
134 IPython.tooltip = notebook.tooltip;
137 IPython.tooltip = notebook.tooltip;
138 IPython.scrollmanager = scrollmanager;
135
139
136 events.trigger('app_initialized.NotebookApp');
140 events.trigger('app_initialized.NotebookApp');
137 notebook.load_notebook(common_options.notebook_name, common_options.notebook_path);
141 notebook.load_notebook(common_options.notebook_name, common_options.notebook_path);
General Comments 0
You need to be logged in to leave comments. Login now