##// END OF EJS Templates
Prevent the page from jumping on tree tab change
Jonathan Frederic -
Show More
@@ -1,151 +1,162
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 require([
4 require([
5 'jquery',
5 'jquery',
6 'base/js/namespace',
6 'base/js/namespace',
7 'base/js/dialog',
7 'base/js/dialog',
8 'base/js/events',
8 'base/js/events',
9 'base/js/page',
9 'base/js/page',
10 'base/js/utils',
10 'base/js/utils',
11 'services/config',
11 'services/config',
12 'contents',
12 'contents',
13 'tree/js/notebooklist',
13 'tree/js/notebooklist',
14 'tree/js/clusterlist',
14 'tree/js/clusterlist',
15 'tree/js/sessionlist',
15 'tree/js/sessionlist',
16 'tree/js/kernellist',
16 'tree/js/kernellist',
17 'tree/js/terminallist',
17 'tree/js/terminallist',
18 'tree/js/newnotebook',
18 'tree/js/newnotebook',
19 'auth/js/loginwidget',
19 'auth/js/loginwidget',
20 // only loaded, not used:
20 // only loaded, not used:
21 'jqueryui',
21 'jqueryui',
22 'bootstrap',
22 'bootstrap',
23 'custom/custom',
23 'custom/custom',
24 ], function(
24 ], function(
25 $,
25 $,
26 IPython,
26 IPython,
27 dialog,
27 dialog,
28 events,
28 events,
29 page,
29 page,
30 utils,
30 utils,
31 config,
31 config,
32 contents_service,
32 contents_service,
33 notebooklist,
33 notebooklist,
34 clusterlist,
34 clusterlist,
35 sesssionlist,
35 sesssionlist,
36 kernellist,
36 kernellist,
37 terminallist,
37 terminallist,
38 newnotebook,
38 newnotebook,
39 loginwidget){
39 loginwidget){
40 "use strict";
40 "use strict";
41
41
42 page = new page.Page();
42 page = new page.Page();
43
43
44 var common_options = {
44 var common_options = {
45 base_url: utils.get_body_data("baseUrl"),
45 base_url: utils.get_body_data("baseUrl"),
46 notebook_path: utils.get_body_data("notebookPath"),
46 notebook_path: utils.get_body_data("notebookPath"),
47 };
47 };
48 var cfg = new config.ConfigSection('tree', common_options);
48 var cfg = new config.ConfigSection('tree', common_options);
49 cfg.load();
49 cfg.load();
50 common_options.config = cfg;
50 common_options.config = cfg;
51
51
52 var session_list = new sesssionlist.SesssionList($.extend({
52 var session_list = new sesssionlist.SesssionList($.extend({
53 events: events},
53 events: events},
54 common_options));
54 common_options));
55 var contents = new contents_service.Contents($.extend({
55 var contents = new contents_service.Contents($.extend({
56 events: events},
56 events: events},
57 common_options));
57 common_options));
58 var notebook_list = new notebooklist.NotebookList('#notebook_list', $.extend({
58 var notebook_list = new notebooklist.NotebookList('#notebook_list', $.extend({
59 contents: contents,
59 contents: contents,
60 session_list: session_list},
60 session_list: session_list},
61 common_options));
61 common_options));
62 var cluster_list = new clusterlist.ClusterList('#cluster_list', common_options);
62 var cluster_list = new clusterlist.ClusterList('#cluster_list', common_options);
63 var kernel_list = new kernellist.KernelList('#running_list', $.extend({
63 var kernel_list = new kernellist.KernelList('#running_list', $.extend({
64 session_list: session_list},
64 session_list: session_list},
65 common_options));
65 common_options));
66
66
67 var terminal_list;
67 var terminal_list;
68 if (utils.get_body_data("terminalsAvailable") === "True") {
68 if (utils.get_body_data("terminalsAvailable") === "True") {
69 terminal_list = new terminallist.TerminalList('#terminal_list', common_options);
69 terminal_list = new terminallist.TerminalList('#terminal_list', common_options);
70 }
70 }
71
71
72 var login_widget = new loginwidget.LoginWidget('#login_widget', common_options);
72 var login_widget = new loginwidget.LoginWidget('#login_widget', common_options);
73
73
74 var nnw = new newnotebook.NewNotebookWidget("#new-notebook-buttons",
74 var nnw = new newnotebook.NewNotebookWidget("#new-notebook-buttons",
75 $.extend(
75 $.extend(
76 {contents: contents},
76 {contents: contents},
77 common_options
77 common_options
78 )
78 )
79 );
79 );
80
80
81 var interval_id=0;
81 var interval_id=0;
82 // auto refresh every xx secondes, no need to be fast,
82 // auto refresh every xx secondes, no need to be fast,
83 // update is done at least when page get focus
83 // update is done at least when page get focus
84 var time_refresh = 60; // in sec
84 var time_refresh = 60; // in sec
85
85
86 var enable_autorefresh = function(){
86 var enable_autorefresh = function(){
87 /**
87 /**
88 *refresh immediately , then start interval
88 *refresh immediately , then start interval
89 */
89 */
90 session_list.load_sessions();
90 session_list.load_sessions();
91 cluster_list.load_list();
91 cluster_list.load_list();
92 if (terminal_list) {
92 if (terminal_list) {
93 terminal_list.load_terminals();
93 terminal_list.load_terminals();
94 }
94 }
95 if (!interval_id){
95 if (!interval_id){
96 interval_id = setInterval(function(){
96 interval_id = setInterval(function(){
97 session_list.load_sessions();
97 session_list.load_sessions();
98 cluster_list.load_list();
98 cluster_list.load_list();
99 if (terminal_list) {
99 if (terminal_list) {
100 terminal_list.load_terminals();
100 terminal_list.load_terminals();
101 }
101 }
102 }, time_refresh*1000);
102 }, time_refresh*1000);
103 }
103 }
104 };
104 };
105
105
106 var disable_autorefresh = function(){
106 var disable_autorefresh = function(){
107 clearInterval(interval_id);
107 clearInterval(interval_id);
108 interval_id = 0;
108 interval_id = 0;
109 };
109 };
110
110
111 // stop autorefresh when page lose focus
111 // stop autorefresh when page lose focus
112 $(window).blur(function() {
112 $(window).blur(function() {
113 disable_autorefresh();
113 disable_autorefresh();
114 });
114 });
115
115
116 //re-enable when page get focus back
116 //re-enable when page get focus back
117 $(window).focus(function() {
117 $(window).focus(function() {
118 enable_autorefresh();
118 enable_autorefresh();
119 });
119 });
120
120
121 // finally start it, it will refresh immediately
121 // finally start it, it will refresh immediately
122 enable_autorefresh();
122 enable_autorefresh();
123
123
124 page.show();
124 page.show();
125
125
126 // For backwards compatability.
126 // For backwards compatability.
127 IPython.page = page;
127 IPython.page = page;
128 IPython.notebook_list = notebook_list;
128 IPython.notebook_list = notebook_list;
129 IPython.cluster_list = cluster_list;
129 IPython.cluster_list = cluster_list;
130 IPython.session_list = session_list;
130 IPython.session_list = session_list;
131 IPython.kernel_list = kernel_list;
131 IPython.kernel_list = kernel_list;
132 IPython.login_widget = login_widget;
132 IPython.login_widget = login_widget;
133 IPython.new_notebook_widget = nnw;
133 IPython.new_notebook_widget = nnw;
134
134
135 events.trigger('app_initialized.DashboardApp');
135 events.trigger('app_initialized.DashboardApp');
136
136
137 // bound the upload method to the on change of the file select list
137 // bound the upload method to the on change of the file select list
138 $("#alternate_upload").change(function (event){
138 $("#alternate_upload").change(function (event){
139 notebook_list.handleFilesUpload(event,'form');
139 notebook_list.handleFilesUpload(event,'form');
140 });
140 });
141
141
142 // set hash on tab click
142 // set hash on tab click
143 $("#tabs").find("a").click(function() {
143 $("#tabs").find("a").click(function(e) {
144 window.location.hash = $(this).attr("href");
144 // Prevent the document from jumping when the active tab is changed to a
145 // tab that has a lot of content.
146 e.preventDefault();
147
148 // Set the hash without causing the page to jump.
149 // http://stackoverflow.com/a/14690177/2824256
150 var hash = $(this).attr("href");
151 if(window.history.pushState) {
152 window.history.pushState(null, null, hash);
153 } else {
154 window.location.hash = hash;
155 }
145 });
156 });
146
157
147 // load tab if url hash
158 // load tab if url hash
148 if (window.location.hash) {
159 if (window.location.hash) {
149 $("#tabs").find("a[href=" + window.location.hash + "]").click();
160 $("#tabs").find("a[href=" + window.location.hash + "]").click();
150 }
161 }
151 });
162 });
General Comments 0
You need to be logged in to leave comments. Login now