##// END OF EJS Templates
rename show/hide methods to avoid jQuery conflict....
Matthias BUSSONNIER -
Show More
@@ -1,139 +1,133 b''
1 /**
1 /**
2 * Primary styles
2 * Primary styles
3 *
3 *
4 * Author: IPython Development Team
4 * Author: IPython Development Team
5 */
5 */
6 /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
6 /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
7 * of chance of beeing generated from the ../less/[samename].less file, you can
7 * of chance of beeing generated from the ../less/[samename].less file, you can
8 * try to get back the less file by reverting somme commit in history
8 * try to get back the less file by reverting somme commit in history
9 **/
9 **/
10 /*
10 /*
11 * We'll try to get something pretty, so we
11 * We'll try to get something pretty, so we
12 * have some strange ccs to have the scroll bar on
12 * have some strange css to have the scroll bar on
13 * the left of the left with fix button on the top right of the tooltip
13 * the left with fix button on the top right of the tooltip
14 */
14 */
15 @-moz-keyframes fadeOut {
15 @-moz-keyframes fadeOut {
16 from {
16 from {
17 opacity: 1;
17 opacity: 1;
18 }
18 }
19 to {
19 to {
20 opacity: 0;
20 opacity: 0;
21 }
21 }
22 }
22 }
23 @-webkit-keyframes fadeOut {
23 @-webkit-keyframes fadeOut {
24 from {
24 from {
25 opacity: 1;
25 opacity: 1;
26 }
26 }
27 to {
27 to {
28 opacity: 0;
28 opacity: 0;
29 }
29 }
30 }
30 }
31 @-moz-keyframes fadeIn {
31 @-moz-keyframes fadeIn {
32 from {
32 from {
33 opacity: 0;
33 opacity: 0;
34 }
34 }
35 to {
35 to {
36 opacity: 1;
36 opacity: 1;
37 }
37 }
38 }
38 }
39 @-webkit-keyframes fadeIn {
39 @-webkit-keyframes fadeIn {
40 from {
40 from {
41 opacity: 0;
41 opacity: 0;
42 }
42 }
43 to {
43 to {
44 opacity: 1;
44 opacity: 1;
45 }
45 }
46 }
46 }
47 .tooltip a {
47 .tooltip a {
48 float: right;
48 float: right;
49 }
49 }
50 /*properties of tooltip after "expand"*/
50 /*properties of tooltip after "expand"*/
51 .bigtooltip {
51 .bigtooltip {
52 overflow: auto;
52 overflow: auto;
53 height: 200px;
53 height: 200px;
54 -webkit-transition-property: height;
54 -webkit-transition-property: height;
55 -webkit-transition-duration: 1s;
55 -webkit-transition-duration: 1s;
56 -moz-transition-property: height;
56 -moz-transition-property: height;
57 -moz-transition-duration: 1s;
57 -moz-transition-duration: 1s;
58 transition-property: height;
58 transition-property: height;
59 transition-duration: 1s;
59 transition-duration: 1s;
60 }
60 }
61 /*properties of tooltip before "expand"*/
61 /*properties of tooltip before "expand"*/
62 .smalltooltip {
62 .smalltooltip {
63 -webkit-transition-property: height;
63 -webkit-transition-property: height;
64 -webkit-transition-duration: 1s;
64 -webkit-transition-duration: 1s;
65 -moz-transition-property: height;
65 -moz-transition-property: height;
66 -moz-transition-duration: 1s;
66 -moz-transition-duration: 1s;
67 transition-property: height;
67 transition-property: height;
68 transition-duration: 1s;
68 transition-duration: 1s;
69 text-overflow: ellipsis;
69 text-overflow: ellipsis;
70 overflow: hidden;
70 overflow: hidden;
71 height: 80px;
71 height: 80px;
72 }
72 }
73 .tooltipbuttons {
73 .tooltipbuttons {
74 position: absolute;
74 position: absolute;
75 padding-right: 15px;
75 padding-right: 15px;
76 top: 0px;
76 top: 0px;
77 right: 0px;
77 right: 0px;
78 }
78 }
79 .tooltiptext {
79 .tooltiptext {
80 /*avoid the button to overlap on some docstring*/
80 /*avoid the button to overlap on some docstring*/
81
81
82 padding-right: 30px;
82 padding-right: 30px;
83 }
83 }
84 .tooltip {
84 .tooltip {
85 max-width: 700px;
85 max-width: 700px;
86 border-radius: 4px;
86 border-radius: 4px;
87 -moz-box-shadow: 0px 6px 10px -1px #adadad;
87 -moz-box-shadow: 0px 6px 10px -1px #adadad;
88 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
88 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
89 box-shadow: 0px 6px 10px -1px #adadad;
89 box-shadow: 0px 6px 10px -1px #adadad;
90 /*fade-in animation when inserted*/
90 /*fade-in animation when inserted*/
91
91
92 -webkit-animation: fadeOut 800ms;
92 -webkit-animation: fadeOut 800ms;
93 -moz-animation: fadeOut 800ms;
93 -moz-animation: fadeOut 800ms;
94 animation: fadeOut 800ms;
94 animation: fadeOut 800ms;
95 -webkit-animation: fadeIn 800ms;
95 -webkit-animation: fadeIn 800ms;
96 -moz-animation: fadeIn 800ms;
96 -moz-animation: fadeIn 800ms;
97 animation: fadeIn 800ms;
97 animation: fadeIn 800ms;
98 vertical-align: middle;
98 vertical-align: middle;
99 background-color: #f7f7f7;
99 background-color: #f7f7f7;
100 overflow: visible;
100 overflow: visible;
101 border: #bbbbbb 1px solid;
101 border: #bbbbbb 1px solid;
102 outline: none;
102 outline: none;
103 padding: 3px;
103 padding: 3px;
104 margin: 0px;
104 margin: 0px;
105 padding-left: 7px;
105 padding-left: 7px;
106 font-family: monospace;
106 font-family: monospace;
107 min-height: 50px;
107 min-height: 50px;
108 position: absolute;
108 position: absolute;
109 }
109 }
110 .pretooltiparrow {
110 .pretooltiparrow {
111 left: 0px;
111 left: 0px;
112 margin: 0px;
112 margin: 0px;
113 top: -16px;
113 top: -16px;
114 width: 40px;
114 width: 40px;
115 height: 16px;
115 height: 16px;
116 overflow: hidden;
116 overflow: hidden;
117 position: absolute;
117 position: absolute;
118 }
118 }
119 .pretooltiparrow:before {
119 .pretooltiparrow:before {
120 background-color: #f7f7f7;
120 background-color: #f7f7f7;
121 border: 1px #bbbbbb solid;
121 border: 1px #bbbbbb solid;
122 z-index: 11;
122 z-index: 11;
123 content: "";
123 content: "";
124 position: absolute;
124 position: absolute;
125 left: 15px;
125 left: 15px;
126 top: 10px;
126 top: 10px;
127 width: 25px;
127 width: 25px;
128 height: 25px;
128 height: 25px;
129 -webkit-transform: rotate(45deg);
129 -webkit-transform: rotate(45deg);
130 -moz-transform: rotate(45deg);
130 -moz-transform: rotate(45deg);
131 -ms-transform: rotate(45deg);
131 -ms-transform: rotate(45deg);
132 -o-transform: rotate(45deg);
132 -o-transform: rotate(45deg);
133 }
133 }
134 .tooltip.hide {
135 -webkit-animation: fadeOut 800ms;
136 -moz-animation: fadeOut 800ms;
137 animation: fadeOut 800ms;
138 opacity: 0;
139 }
@@ -1,361 +1,361 b''
1 //----------------------------------------------------------------------------
1 //----------------------------------------------------------------------------
2 // Copyright (C) 2008-2011 The IPython Development Team
2 // Copyright (C) 2008-2011 The IPython Development Team
3 //
3 //
4 // Distributed under the terms of the BSD License. The full license is in
4 // Distributed under the terms of the BSD License. The full license is in
5 // the file COPYING, distributed as part of this software.
5 // the file COPYING, distributed as part of this software.
6 //----------------------------------------------------------------------------
6 //----------------------------------------------------------------------------
7 //============================================================================
7 //============================================================================
8 // Tooltip
8 // Tooltip
9 //============================================================================
9 //============================================================================
10 //
10 //
11 // you can set the autocall time by setting `IPython.tooltip.time_before_tooltip` in ms
11 // you can set the autocall time by setting `IPython.tooltip.time_before_tooltip` in ms
12 //
12 //
13 // you can configure the differents action of pressing tab several times in a row by
13 // you can configure the differents action of pressing tab several times in a row by
14 // setting/appending different fonction in the array
14 // setting/appending different fonction in the array
15 // IPython.tooltip.tabs_functions
15 // IPython.tooltip.tabs_functions
16 //
16 //
17 // eg :
17 // eg :
18 // IPython.tooltip.tabs_functions[4] = function (){console.log('this is the action of the 4th tab pressing')}
18 // IPython.tooltip.tabs_functions[4] = function (){console.log('this is the action of the 4th tab pressing')}
19 //
19 //
20 var IPython = (function (IPython) {
20 var IPython = (function (IPython) {
21 "use strict";
21 "use strict";
22
22
23 var utils = IPython.utils;
23 var utils = IPython.utils;
24
24
25 // tooltip constructor
25 // tooltip constructor
26 var Tooltip = function () {
26 var Tooltip = function () {
27 var that = this;
27 var that = this;
28 this.time_before_tooltip = 1200;
28 this.time_before_tooltip = 1200;
29
29
30 // handle to html
30 // handle to html
31 this.tooltip = $('#tooltip');
31 this.tooltip = $('#tooltip');
32 this._hidden = true;
32 this._hidden = true;
33
33
34 // variable for consecutive call
34 // variable for consecutive call
35 this._old_cell = null;
35 this._old_cell = null;
36 this._old_request = null;
36 this._old_request = null;
37 this._consecutive_counter = 0;
37 this._consecutive_counter = 0;
38
38
39 // 'sticky ?'
39 // 'sticky ?'
40 this._sticky = false;
40 this._sticky = false;
41
41
42 // contain the button in the upper right corner
42 // contain the button in the upper right corner
43 this.buttons = $('<div/>').addClass('tooltipbuttons');
43 this.buttons = $('<div/>').addClass('tooltipbuttons');
44
44
45 // will contain the docstring
45 // will contain the docstring
46 this.text = $('<div/>').addClass('tooltiptext').addClass('smalltooltip');
46 this.text = $('<div/>').addClass('tooltiptext').addClass('smalltooltip');
47
47
48 // build the buttons menu on the upper right
48 // build the buttons menu on the upper right
49 // expand the tooltip to see more
49 // expand the tooltip to see more
50 var expandlink = $('<a/>').attr('href', "#").addClass("ui-corner-all") //rounded corner
50 var expandlink = $('<a/>').attr('href', "#").addClass("ui-corner-all") //rounded corner
51 .attr('role', "button").attr('id', 'expanbutton').attr('title', 'Grow the tooltip vertically (press tab 2 times)').click(function () {
51 .attr('role', "button").attr('id', 'expanbutton').attr('title', 'Grow the tooltip vertically (press tab 2 times)').click(function () {
52 that.expand()
52 that.expand()
53 }).append(
53 }).append(
54 $('<span/>').text('Expand').addClass('ui-icon').addClass('ui-icon-plus'));
54 $('<span/>').text('Expand').addClass('ui-icon').addClass('ui-icon-plus'));
55
55
56 // open in pager
56 // open in pager
57 var morelink = $('<a/>').attr('href', "#").attr('role', "button").addClass('ui-button').attr('title', 'show the current docstring in pager (press tab 4 times)');
57 var morelink = $('<a/>').attr('href', "#").attr('role', "button").addClass('ui-button').attr('title', 'show the current docstring in pager (press tab 4 times)');
58 var morespan = $('<span/>').text('Open in Pager').addClass('ui-icon').addClass('ui-icon-arrowstop-l-n');
58 var morespan = $('<span/>').text('Open in Pager').addClass('ui-icon').addClass('ui-icon-arrowstop-l-n');
59 morelink.append(morespan);
59 morelink.append(morespan);
60 morelink.click(function () {
60 morelink.click(function () {
61 that.showInPager();
61 that.showInPager();
62 });
62 });
63
63
64 // close the tooltip
64 // close the tooltip
65 var closelink = $('<a/>').attr('href', "#").attr('role', "button").addClass('ui-button');
65 var closelink = $('<a/>').attr('href', "#").attr('role', "button").addClass('ui-button');
66 var closespan = $('<span/>').text('Close').addClass('ui-icon').addClass('ui-icon-close');
66 var closespan = $('<span/>').text('Close').addClass('ui-icon').addClass('ui-icon-close');
67 closelink.append(closespan);
67 closelink.append(closespan);
68 closelink.click(function () {
68 closelink.click(function () {
69 that.remove_and_cancel_tooltip(true);
69 that.remove_and_cancel_tooltip(true);
70 });
70 });
71
71
72 this._clocklink = $('<a/>').attr('href', "#");
72 this._clocklink = $('<a/>').attr('href', "#");
73 this._clocklink.attr('role', "button");
73 this._clocklink.attr('role', "button");
74 this._clocklink.addClass('ui-button');
74 this._clocklink.addClass('ui-button');
75 this._clocklink.attr('title', 'Tootip is not dismissed while typing for 10 seconds');
75 this._clocklink.attr('title', 'Tootip is not dismissed while typing for 10 seconds');
76 var clockspan = $('<span/>').text('Close');
76 var clockspan = $('<span/>').text('Close');
77 clockspan.addClass('ui-icon');
77 clockspan.addClass('ui-icon');
78 clockspan.addClass('ui-icon-clock');
78 clockspan.addClass('ui-icon-clock');
79 this._clocklink.append(clockspan);
79 this._clocklink.append(clockspan);
80 this._clocklink.click(function () {
80 this._clocklink.click(function () {
81 that.cancel_stick();
81 that.cancel_stick();
82 });
82 });
83
83
84
84
85
85
86
86
87 //construct the tooltip
87 //construct the tooltip
88 // add in the reverse order you want them to appear
88 // add in the reverse order you want them to appear
89 this.buttons.append(closelink);
89 this.buttons.append(closelink);
90 this.buttons.append(expandlink);
90 this.buttons.append(expandlink);
91 this.buttons.append(morelink);
91 this.buttons.append(morelink);
92 this.buttons.append(this._clocklink);
92 this.buttons.append(this._clocklink);
93 this._clocklink.hide();
93 this._clocklink.hide();
94
94
95
95
96 // we need a phony element to make the small arrow
96 // we need a phony element to make the small arrow
97 // of the tooltip in css
97 // of the tooltip in css
98 // we will move the arrow later
98 // we will move the arrow later
99 this.arrow = $('<div/>').addClass('pretooltiparrow');
99 this.arrow = $('<div/>').addClass('pretooltiparrow');
100 this.tooltip.append(this.buttons);
100 this.tooltip.append(this.buttons);
101 this.tooltip.append(this.arrow);
101 this.tooltip.append(this.arrow);
102 this.tooltip.append(this.text);
102 this.tooltip.append(this.text);
103
103
104 // function that will be called if you press tab 1, 2, 3... times in a row
104 // function that will be called if you press tab 1, 2, 3... times in a row
105 this.tabs_functions = [function (cell, text) {
105 this.tabs_functions = [function (cell, text) {
106 that._request_tooltip(cell, text);
106 that._request_tooltip(cell, text);
107 IPython.notification_widget.set_message('tab again to expand pager', 2500);
107 IPython.notification_widget.set_message('tab again to expand pager', 2500);
108 }, function () {
108 }, function () {
109 that.expand();
109 that.expand();
110 IPython.notification_widget.set_message('tab again to make pager sticky for 10s', 2500);
110 IPython.notification_widget.set_message('tab again to make pager sticky for 10s', 2500);
111 }, function () {
111 }, function () {
112 that.stick();
112 that.stick();
113 IPython.notification_widget.set_message('tab again to open help in pager', 2500);
113 IPython.notification_widget.set_message('tab again to open help in pager', 2500);
114 }, function (cell) {
114 }, function (cell) {
115 that.cancel_stick();
115 that.cancel_stick();
116 that.showInPager(cell);
116 that.showInPager(cell);
117 that._cmfocus();
117 that._cmfocus();
118 }];
118 }];
119 // call after all the tabs function above have bee call to clean their effects
119 // call after all the tabs function above have bee call to clean their effects
120 // if necessary
120 // if necessary
121 this.reset_tabs_function = function (cell, text) {
121 this.reset_tabs_function = function (cell, text) {
122 this._old_cell = (cell) ? cell : null;
122 this._old_cell = (cell) ? cell : null;
123 this._old_request = (text) ? text : null;
123 this._old_request = (text) ? text : null;
124 this._consecutive_counter = 0;
124 this._consecutive_counter = 0;
125 }
125 }
126 };
126 };
127
127
128 Tooltip.prototype.showInPager = function (cell) {
128 Tooltip.prototype.showInPager = function (cell) {
129 // reexecute last call in pager by appending ? to show back in pager
129 // reexecute last call in pager by appending ? to show back in pager
130 var that = this;
130 var that = this;
131 var empty = function () {};
131 var empty = function () {};
132 IPython.notebook.kernel.execute(
132 IPython.notebook.kernel.execute(
133 that.name + '?', {
133 that.name + '?', {
134 'execute_reply': empty,
134 'execute_reply': empty,
135 'output': empty,
135 'output': empty,
136 'clear_output': empty,
136 'clear_output': empty,
137 'cell': cell
137 'cell': cell
138 }, {
138 }, {
139 'silent': false
139 'silent': false
140 });
140 });
141 this.remove_and_cancel_tooltip();
141 this.remove_and_cancel_tooltip();
142 this._cmfocus();
142 this._cmfocus();
143 }
143 }
144
144
145 // grow the tooltip verticaly
145 // grow the tooltip verticaly
146 Tooltip.prototype.expand = function () {
146 Tooltip.prototype.expand = function () {
147 this.text.removeClass('smalltooltip');
147 this.text.removeClass('smalltooltip');
148 this.text.addClass('bigtooltip');
148 this.text.addClass('bigtooltip');
149 $('#expanbutton').hide('slow');
149 $('#expanbutton').hide('slow');
150 this._cmfocus();
150 this._cmfocus();
151 }
151 }
152
152
153 // deal with all the logic of hiding the tooltip
153 // deal with all the logic of hiding the tooltip
154 // and reset it's status
154 // and reset it's status
155 Tooltip.prototype.hide = function () {
155 Tooltip.prototype._hide = function () {
156 this.tooltip.addClass('hide');
156 this.tooltip.fadeOut('fast');
157 $('#expanbutton').show('slow');
157 $('#expanbutton').show('slow');
158 this.text.removeClass('bigtooltip');
158 this.text.removeClass('bigtooltip');
159 this.text.addClass('smalltooltip');
159 this.text.addClass('smalltooltip');
160 // keep scroll top to be sure to always see the first line
160 // keep scroll top to be sure to always see the first line
161 this.text.scrollTop(0);
161 this.text.scrollTop(0);
162 this._hidden = true;
162 this._hidden = true;
163 }
163 }
164
164
165 Tooltip.prototype.remove_and_cancel_tooltip = function (force) {
165 Tooltip.prototype.remove_and_cancel_tooltip = function (force) {
166 // note that we don't handle closing directly inside the calltip
166 // note that we don't handle closing directly inside the calltip
167 // as in the completer, because it is not focusable, so won't
167 // as in the completer, because it is not focusable, so won't
168 // get the event.
168 // get the event.
169 if (this._sticky == false || force == true) {
169 if (this._sticky == false || force == true) {
170 this.hide();
170 this._hide();
171 }
171 }
172 this.cancel_pending();
172 this.cancel_pending();
173 this.reset_tabs_function ();
173 this.reset_tabs_function();
174 this._cmfocus();
174 }
175 }
175
176
176 // cancel autocall done after '(' for example.
177 // cancel autocall done after '(' for example.
177 Tooltip.prototype.cancel_pending = function () {
178 Tooltip.prototype.cancel_pending = function () {
178 if (this._tooltip_timeout != null) {
179 if (this._tooltip_timeout != null) {
179 clearTimeout(this._tooltip_timeout);
180 clearTimeout(this._tooltip_timeout);
180 this._tooltip_timeout = null;
181 this._tooltip_timeout = null;
181 }
182 }
182 }
183 }
183
184
184 // will trigger tooltip after timeout
185 // will trigger tooltip after timeout
185 Tooltip.prototype.pending = function (cell) {
186 Tooltip.prototype.pending = function (cell) {
186 var that = this;
187 var that = this;
187 this._tooltip_timeout = setTimeout(function () {
188 this._tooltip_timeout = setTimeout(function () {
188 that.request(cell)
189 that.request(cell)
189 }, that.time_before_tooltip);
190 }, that.time_before_tooltip);
190 }
191 }
191
192
192 Tooltip.prototype._request_tooltip = function (cell, func) {
193 Tooltip.prototype._request_tooltip = function (cell, func) {
193 // use internally just to make the request to the kernel
194 // use internally just to make the request to the kernel
194 // Feel free to shorten this logic if you are better
195 // Feel free to shorten this logic if you are better
195 // than me in regEx
196 // than me in regEx
196 // basicaly you shoul be able to get xxx.xxx.xxx from
197 // basicaly you shoul be able to get xxx.xxx.xxx from
197 // something(range(10), kwarg=smth) ; xxx.xxx.xxx( firstarg, rand(234,23), kwarg1=2,
198 // something(range(10), kwarg=smth) ; xxx.xxx.xxx( firstarg, rand(234,23), kwarg1=2,
198 // remove everything between matchin bracket (need to iterate)
199 // remove everything between matchin bracket (need to iterate)
199 var matchBracket = /\([^\(\)]+\)/g;
200 var matchBracket = /\([^\(\)]+\)/g;
200 var endBracket = /\([^\(]*$/g;
201 var endBracket = /\([^\(]*$/g;
201 var oldfunc = func;
202 var oldfunc = func;
202
203
203 func = func.replace(matchBracket, "");
204 func = func.replace(matchBracket, "");
204 while (oldfunc != func) {
205 while (oldfunc != func) {
205 oldfunc = func;
206 oldfunc = func;
206 func = func.replace(matchBracket, "");
207 func = func.replace(matchBracket, "");
207 }
208 }
208 // remove everything after last open bracket
209 // remove everything after last open bracket
209 func = func.replace(endBracket, "");
210 func = func.replace(endBracket, "");
210
211
211 var re = /[a-z_][0-9a-z._]+$/gi; // casse insensitive
212 var re = /[a-z_][0-9a-z._]+$/gi; // casse insensitive
212 var callbacks = {
213 var callbacks = {
213 'object_info_reply': $.proxy(this.show, this)
214 'object_info_reply': $.proxy(this._show, this)
214 }
215 }
215 var msg_id = IPython.notebook.kernel.object_info_request(re.exec(func), callbacks);
216 var msg_id = IPython.notebook.kernel.object_info_request(re.exec(func), callbacks);
216 }
217 }
217
218
218 // make an imediate completion request
219 // make an imediate completion request
219 Tooltip.prototype.request = function (cell) {
220 Tooltip.prototype.request = function (cell) {
220 // request(codecell)
221 // request(codecell)
221 // Deal with extracting the text from the cell and counting
222 // Deal with extracting the text from the cell and counting
222 // call in a row
223 // call in a row
223 this.cancel_pending();
224 this.cancel_pending();
224 var editor = cell.code_mirror;
225 var editor = cell.code_mirror;
225 var cursor = editor.getCursor();
226 var cursor = editor.getCursor();
226 var text = editor.getRange({
227 var text = editor.getRange({
227 line: cursor.line,
228 line: cursor.line,
228 ch: 0
229 ch: 0
229 }, cursor).trim();
230 }, cursor).trim();
230
231
231 // need a permanent handel to codemirror for future auto recall
232 // need a permanent handel to codemirror for future auto recall
232 this.code_mirror = editor;
233 this.code_mirror = editor;
233
234
234 // now we treat the different number of keypress
235 // now we treat the different number of keypress
235 // first if same cell, same text, increment counter by 1
236 // first if same cell, same text, increment counter by 1
236 if (this._old_cell == cell && this._old_request == text && this._hidden == false) {
237 if (this._old_cell == cell && this._old_request == text && this._hidden == false) {
237 this._consecutive_counter++;
238 this._consecutive_counter++;
238 } else {
239 } else {
239 // else reset
240 // else reset
240 this.cancel_stick();
241 this.cancel_stick();
241 this.reset_tabs_function (cell, text);
242 this.reset_tabs_function (cell, text);
242 }
243 }
243
244
244 // don't do anything if line beggin with '(' or is empty
245 // don't do anything if line beggin with '(' or is empty
245 if (text === "" || text === "(") {
246 if (text === "" || text === "(") {
246 return;
247 return;
247 }
248 }
248
249
249 this.tabs_functions[this._consecutive_counter](cell, text);
250 this.tabs_functions[this._consecutive_counter](cell, text);
250
251
251 // then if we are at the end of list function, reset
252 // then if we are at the end of list function, reset
252 if (this._consecutive_counter == this.tabs_functions.length) this.reset_tabs_function (cell, text);
253 if (this._consecutive_counter == this.tabs_functions.length) this.reset_tabs_function (cell, text);
253
254
254 return;
255 return;
255 }
256 }
256
257
257 // cancel the option of having the tooltip to stick
258 // cancel the option of having the tooltip to stick
258 Tooltip.prototype.cancel_stick = function () {
259 Tooltip.prototype.cancel_stick = function () {
259 clearTimeout(this._stick_timeout);
260 clearTimeout(this._stick_timeout);
260 this._stick_timeout = null;
261 this._stick_timeout = null;
261 this._clocklink.hide('slow');
262 this._clocklink.hide('slow');
262 this._sticky = false;
263 this._sticky = false;
263 }
264 }
264
265
265 // put the tooltip in a sicky state for 10 seconds
266 // put the tooltip in a sicky state for 10 seconds
266 // it won't be removed by remove_and_cancell() unless you called with
267 // it won't be removed by remove_and_cancell() unless you called with
267 // the first parameter set to true.
268 // the first parameter set to true.
268 // remove_and_cancell_tooltip(true)
269 // remove_and_cancell_tooltip(true)
269 Tooltip.prototype.stick = function (time) {
270 Tooltip.prototype.stick = function (time) {
270 time = (time != undefined) ? time : 10;
271 time = (time != undefined) ? time : 10;
271 var that = this;
272 var that = this;
272 this._sticky = true;
273 this._sticky = true;
273 this._clocklink.show('slow');
274 this._clocklink.show('slow');
274 this._stick_timeout = setTimeout(function () {
275 this._stick_timeout = setTimeout(function () {
275 that._sticky = false;
276 that._sticky = false;
276 that._clocklink.hide('slow');
277 that._clocklink.hide('slow');
277 }, time * 1000);
278 }, time * 1000);
278 }
279 }
279
280
280 // should be called with the kernel reply to actually show the tooltip
281 // should be called with the kernel reply to actually show the tooltip
281 Tooltip.prototype.show = function (reply) {
282 Tooltip.prototype._show = function (reply) {
282 // move the bubble if it is not hidden
283 // move the bubble if it is not hidden
283 // otherwise fade it
284 // otherwise fade it
284 this.name = reply.name;
285 this.name = reply.name;
285
286
286 // do some math to have the tooltip arrow on more or less on left or right
287 // do some math to have the tooltip arrow on more or less on left or right
287 // width of the editor
288 // width of the editor
288 var w = $(this.code_mirror.getScrollerElement()).width();
289 var w = $(this.code_mirror.getScrollerElement()).width();
289 // ofset of the editor
290 // ofset of the editor
290 var o = $(this.code_mirror.getScrollerElement()).offset();
291 var o = $(this.code_mirror.getScrollerElement()).offset();
291 var pos = this.code_mirror.cursorCoords();
292 var pos = this.code_mirror.cursorCoords();
292 var xinit = pos.x;
293 var xinit = pos.x;
293 var xinter = o.left + (xinit - o.left) / w * (w - 450);
294 var xinter = o.left + (xinit - o.left) / w * (w - 450);
294 var posarrowleft = xinit - xinter;
295 var posarrowleft = xinit - xinter;
295
296
296
297
297 if (this._hidden == false) {
298 if (this._hidden == false) {
298 this.tooltip.animate({
299 this.tooltip.animate({
299 'left': xinter - 30 + 'px',
300 'left': xinter - 30 + 'px',
300 'top': (pos.yBot + 10) + 'px'
301 'top': (pos.yBot + 10) + 'px'
301 });
302 });
302 } else {
303 } else {
303 this.tooltip.css({
304 this.tooltip.css({
304 'left': xinter - 30 + 'px'
305 'left': xinter - 30 + 'px'
305 });
306 });
306 this.tooltip.css({
307 this.tooltip.css({
307 'top': (pos.yBot + 10) + 'px'
308 'top': (pos.yBot + 10) + 'px'
308 });
309 });
309 }
310 }
310 this.arrow.animate({
311 this.arrow.animate({
311 'left': posarrowleft + 'px'
312 'left': posarrowleft + 'px'
312 });
313 });
313 this.tooltip.removeClass('hidden')
314 this.tooltip.fadeIn('fast');
314 this.tooltip.removeClass('hide');
315 this._hidden = false;
315 this._hidden = false;
316
316
317 // build docstring
317 // build docstring
318 var defstring = reply.call_def;
318 var defstring = reply.call_def;
319 if (defstring == null) {
319 if (defstring == null) {
320 defstring = reply.init_definition;
320 defstring = reply.init_definition;
321 }
321 }
322 if (defstring == null) {
322 if (defstring == null) {
323 defstring = reply.definition;
323 defstring = reply.definition;
324 }
324 }
325
325
326 var docstring = reply.call_docstring;
326 var docstring = reply.call_docstring;
327 if (docstring == null) {
327 if (docstring == null) {
328 docstring = reply.init_docstring;
328 docstring = reply.init_docstring;
329 }
329 }
330 if (docstring == null) {
330 if (docstring == null) {
331 docstring = reply.docstring;
331 docstring = reply.docstring;
332 }
332 }
333 if (docstring == null) {
333 if (docstring == null) {
334 docstring = "<empty docstring>";
334 docstring = "<empty docstring>";
335 }
335 }
336
336
337 this.text.children().remove();
337 this.text.children().remove();
338
338
339 var pre = $('<pre/>').html(utils.fixConsole(docstring));
339 var pre = $('<pre/>').html(utils.fixConsole(docstring));
340 if (defstring) {
340 if (defstring) {
341 var defstring_html = $('<pre/>').html(utils.fixConsole(defstring));
341 var defstring_html = $('<pre/>').html(utils.fixConsole(defstring));
342 this.text.append(defstring_html);
342 this.text.append(defstring_html);
343 }
343 }
344 this.text.append(pre);
344 this.text.append(pre);
345 // keep scroll top to be sure to always see the first line
345 // keep scroll top to be sure to always see the first line
346 this.text.scrollTop(0);
346 this.text.scrollTop(0);
347 }
347 }
348
348
349 // convenient funciton to have the correct codemirror back into focus
349 // convenient funciton to have the correct codemirror back into focus
350 Tooltip.prototype._cmfocus = function () {
350 Tooltip.prototype._cmfocus = function () {
351 var cm = this.code_mirror;
351 var cm = this.code_mirror;
352 setTimeout(function () {
352 setTimeout(function () {
353 cm.focus();
353 cm.focus();
354 }, 50);
354 }, 50);
355 }
355 }
356
356
357 IPython.Tooltip = Tooltip;
357 IPython.Tooltip = Tooltip;
358
358
359 return IPython;
359 return IPython;
360
360
361 }(IPython));
361 }(IPython));
@@ -1,167 +1,159 b''
1 /**
1 /**
2 * Primary styles
2 * Primary styles
3 *
3 *
4 * Author: IPython Development Team
4 * Author: IPython Development Team
5 */
5 */
6
6
7 /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
7 /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
8 * of chance of beeing generated from the ../less/[samename].less file, you can
8 * of chance of beeing generated from the ../less/[samename].less file, you can
9 * try to get back the less file by reverting somme commit in history
9 * try to get back the less file by reverting somme commit in history
10 **/
10 **/
11
11
12 /*
12 /*
13 * We'll try to get something pretty, so we
13 * We'll try to get something pretty, so we
14 * have some strange css to have the scroll bar on
14 * have some strange css to have the scroll bar on
15 * the left of the left with fix button on the top right of the tooltip
15 * the left with fix button on the top right of the tooltip
16 */
16 */
17
17
18 // double slash comment are remove by less compilation
18 // double slash comment are remove by less compilation
19 // **
19 // **
20 // * Less mixins
20 // * Less mixins
21 // **/
21 // **/
22
22
23 // Four color of the background
23 // Four color of the background
24 @c4 : rgb(247,247,247);
24 @c4 : rgb(247,247,247);
25 @bordercolor : #BBB;
25 @bordercolor : #BBB;
26 @borderwidth : 1px;
26 @borderwidth : 1px;
27
27
28 .dropshadow(){
28 .dropshadow(){
29 -moz-box-shadow: 0px 6px 10px -1px #adadad;
29 -moz-box-shadow: 0px 6px 10px -1px #adadad;
30 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
30 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
31 box-shadow: 0px 6px 10px -1px #adadad;
31 box-shadow: 0px 6px 10px -1px #adadad;
32 }
32 }
33
33
34 // smoth height adaptation
34 // smoth height adaptation
35 .smoothheight(@t:1s) {
35 .smoothheight(@t:1s) {
36 -webkit-transition-property: height;
36 -webkit-transition-property: height;
37 -webkit-transition-duration: 1s;
37 -webkit-transition-duration: 1s;
38 -moz-transition-property: height;
38 -moz-transition-property: height;
39 -moz-transition-duration: 1s;
39 -moz-transition-duration: 1s;
40 transition-property: height;
40 transition-property: height;
41 transition-duration: 1s;
41 transition-duration: 1s;
42 }
42 }
43
43
44 @-moz-keyframes fadeOut {
44 @-moz-keyframes fadeOut {
45 from {opacity:1;}
45 from {opacity:1;}
46 to {opacity:0;}
46 to {opacity:0;}
47 }
47 }
48
48
49 @-webkit-keyframes fadeOut {
49 @-webkit-keyframes fadeOut {
50 from {opacity:1;}
50 from {opacity:1;}
51 to {opacity:0;}
51 to {opacity:0;}
52 }
52 }
53
53
54 //@keyframes fadeOut {
54 //@keyframes fadeOut {
55 // from {opacity:1;}
55 // from {opacity:1;}
56 // to {opacity:0;}
56 // to {opacity:0;}
57 //}
57 //}
58
58
59 @-moz-keyframes fadeIn {
59 @-moz-keyframes fadeIn {
60 from {opacity:0;}
60 from {opacity:0;}
61 to {opacity:1;}
61 to {opacity:1;}
62 }
62 }
63
63
64 @-webkit-keyframes fadeIn {
64 @-webkit-keyframes fadeIn {
65 from {opacity:0;}
65 from {opacity:0;}
66 to {opacity:1;}
66 to {opacity:1;}
67 }
67 }
68
68
69 //@keyframes fadeIn {
69 //@keyframes fadeIn {
70 // from {opacity:0;}
70 // from {opacity:0;}
71 // to {opacity:1;}
71 // to {opacity:1;}
72 //}
72 //}
73
73
74 .tooltip a {
74 .tooltip a {
75 float:right;
75 float:right;
76 }
76 }
77
77
78 /*properties of tooltip after "expand"*/
78 /*properties of tooltip after "expand"*/
79 .bigtooltip {
79 .bigtooltip {
80 overflow: auto;
80 overflow: auto;
81 height: 200px;
81 height: 200px;
82 .smoothheight();
82 .smoothheight();
83 }
83 }
84
84
85 /*properties of tooltip before "expand"*/
85 /*properties of tooltip before "expand"*/
86 .smalltooltip{
86 .smalltooltip{
87 .smoothheight();
87 .smoothheight();
88 text-overflow: ellipsis;
88 text-overflow: ellipsis;
89 overflow: hidden;
89 overflow: hidden;
90 height:80px;
90 height:80px;
91 }
91 }
92
92
93 .tooltipbuttons
93 .tooltipbuttons
94 {
94 {
95 position: absolute;
95 position: absolute;
96 padding-right : 15px;
96 padding-right : 15px;
97 top : 0px;
97 top : 0px;
98 right:0px;
98 right:0px;
99 }
99 }
100
100
101 .tooltiptext
101 .tooltiptext
102 {
102 {
103 /*avoid the button to overlap on some docstring*/
103 /*avoid the button to overlap on some docstring*/
104 padding-right:30px
104 padding-right:30px
105 }
105 }
106
106
107 .tooltip {
107 .tooltip {
108 max-width:700px;
108 max-width:700px;
109 border-radius: 4px;
109 border-radius: 4px;
110 .dropshadow;
110 .dropshadow;
111 /*fade-in animation when inserted*/
111 /*fade-in animation when inserted*/
112 -webkit-animation: fadeOut 800ms;
112 -webkit-animation: fadeOut 800ms;
113 -moz-animation: fadeOut 800ms;
113 -moz-animation: fadeOut 800ms;
114 animation: fadeOut 800ms;
114 animation: fadeOut 800ms;
115 -webkit-animation: fadeIn 800ms;
115 -webkit-animation: fadeIn 800ms;
116 -moz-animation: fadeIn 800ms;
116 -moz-animation: fadeIn 800ms;
117 animation: fadeIn 800ms;
117 animation: fadeIn 800ms;
118 vertical-align: middle;
118 vertical-align: middle;
119 background-color: @c4;
119 background-color: @c4;
120
120
121 overflow : visible;
121 overflow : visible;
122 border: @bordercolor @borderwidth solid;
122 border: @bordercolor @borderwidth solid;
123 outline: none;
123 outline: none;
124 padding: 3px;
124 padding: 3px;
125 margin: 0px;
125 margin: 0px;
126 padding-left:7px;
126 padding-left:7px;
127 font-family: monospace;
127 font-family: monospace;
128 min-height:50px;
128 min-height:50px;
129 position: absolute;
129 position: absolute;
130 }
130 }
131
131
132
132
133 .pretooltiparrow {
133 .pretooltiparrow {
134 left: 0px;
134 left: 0px;
135 margin: 0px;
135 margin: 0px;
136 top: -16px;
136 top: -16px;
137 width: 40px;
137 width: 40px;
138 height: 16px;
138 height: 16px;
139 overflow: hidden;
139 overflow: hidden;
140 position: absolute;
140 position: absolute;
141
141
142 }
142 }
143
143
144 .pretooltiparrow:before {
144 .pretooltiparrow:before {
145 background-color : @c4;
145 background-color : @c4;
146 border : @borderwidth @bordercolor solid;
146 border : @borderwidth @bordercolor solid;
147 z-index:11;
147 z-index:11;
148 content: "";
148 content: "";
149 position: absolute;
149 position: absolute;
150 left: 15px;
150 left: 15px;
151 top: 10px;
151 top: 10px;
152 width: 25px;
152 width: 25px;
153 height: 25px;
153 height: 25px;
154 @theta : 45deg;
154 @theta : 45deg;
155 -webkit-transform: rotate(@theta);
155 -webkit-transform: rotate(@theta);
156 -moz-transform: rotate(@theta);
156 -moz-transform: rotate(@theta);
157 -ms-transform: rotate(@theta);
157 -ms-transform: rotate(@theta);
158 -o-transform: rotate(@theta);
158 -o-transform: rotate(@theta);
159 }
159 }
160
161 .tooltip.hide
162 {
163 -webkit-animation: fadeOut 800ms;
164 -moz-animation: fadeOut 800ms;
165 animation: fadeOut 800ms;
166 opacity : 0;
167 }
@@ -1,241 +1,241 b''
1 {% extends page.html %}
1 {% extends page.html %}
2 {% block stylesheet %}
2 {% block stylesheet %}
3
3
4 {% if mathjax_url %}
4 {% if mathjax_url %}
5 <script type="text/javascript" src="{{mathjax_url}}?config=TeX-AMS_HTML" charset="utf-8"></script>
5 <script type="text/javascript" src="{{mathjax_url}}?config=TeX-AMS_HTML" charset="utf-8"></script>
6 {% end %}
6 {% end %}
7 <script type="text/javascript">
7 <script type="text/javascript">
8 // MathJax disabled, set as null to distingish from *missing* MathJax,
8 // MathJax disabled, set as null to distingish from *missing* MathJax,
9 // where it will be undefined, and should prompt a dialog later.
9 // where it will be undefined, and should prompt a dialog later.
10 window.mathjax_url = "{{mathjax_url}}";
10 window.mathjax_url = "{{mathjax_url}}";
11 </script>
11 </script>
12
12
13 <link rel="stylesheet" href="{{ static_url("codemirror/lib/codemirror.css") }}">
13 <link rel="stylesheet" href="{{ static_url("codemirror/lib/codemirror.css") }}">
14 <link rel="stylesheet" href="{{ static_url("codemirror/theme/ipython.css") }}">
14 <link rel="stylesheet" href="{{ static_url("codemirror/theme/ipython.css") }}">
15
15
16 <link rel="stylesheet" href="{{ static_url("prettify/prettify.css") }}"/>
16 <link rel="stylesheet" href="{{ static_url("prettify/prettify.css") }}"/>
17
17
18 <link rel="stylesheet" href="{{ static_url("css/notebook.css") }}" type="text/css" />
18 <link rel="stylesheet" href="{{ static_url("css/notebook.css") }}" type="text/css" />
19 <link rel="stylesheet" href="{{ static_url("css/tooltip.css") }}" type="text/css" />
19 <link rel="stylesheet" href="{{ static_url("css/tooltip.css") }}" type="text/css" />
20 <link rel="stylesheet" href="{{ static_url("css/renderedhtml.css") }}" type="text/css" />
20 <link rel="stylesheet" href="{{ static_url("css/renderedhtml.css") }}" type="text/css" />
21
21
22 {% end %}
22 {% end %}
23
23
24
24
25 {% block params %}
25 {% block params %}
26
26
27 data-project={{project}}
27 data-project={{project}}
28 data-base-project-url={{base_project_url}}
28 data-base-project-url={{base_project_url}}
29 data-base-kernel-url={{base_kernel_url}}
29 data-base-kernel-url={{base_kernel_url}}
30 data-read-only={{read_only and not logged_in}}
30 data-read-only={{read_only and not logged_in}}
31 data-notebook-id={{notebook_id}}
31 data-notebook-id={{notebook_id}}
32
32
33 {% end %}
33 {% end %}
34
34
35
35
36 {% block header %}
36 {% block header %}
37
37
38 <span id="save_widget">
38 <span id="save_widget">
39 <span id="notebook_name"></span>
39 <span id="notebook_name"></span>
40 <span id="save_status"></span>
40 <span id="save_status"></span>
41 </span>
41 </span>
42
42
43 {% end %}
43 {% end %}
44
44
45
45
46 {% block site %}
46 {% block site %}
47
47
48 <div id="menubar_container">
48 <div id="menubar_container">
49 <div id="menubar">
49 <div id="menubar">
50 <ul id="menus">
50 <ul id="menus">
51 <li><a href="#">File</a>
51 <li><a href="#">File</a>
52 <ul>
52 <ul>
53 <li id="new_notebook"><a href="#">New</a></li>
53 <li id="new_notebook"><a href="#">New</a></li>
54 <li id="open_notebook"><a href="#">Open...</a></li>
54 <li id="open_notebook"><a href="#">Open...</a></li>
55 <hr/>
55 <hr/>
56 <li id="copy_notebook"><a href="#">Make a Copy...</a></li>
56 <li id="copy_notebook"><a href="#">Make a Copy...</a></li>
57 <li id="rename_notebook"><a href="#">Rename...</a></li>
57 <li id="rename_notebook"><a href="#">Rename...</a></li>
58 <li id="save_notebook"><a href="#">Save</a></li>
58 <li id="save_notebook"><a href="#">Save</a></li>
59 <hr/>
59 <hr/>
60 <li><a href="#">Download as</a>
60 <li><a href="#">Download as</a>
61 <ul>
61 <ul>
62 <li id="download_ipynb"><a href="#">IPython (.ipynb)</a></li>
62 <li id="download_ipynb"><a href="#">IPython (.ipynb)</a></li>
63 <li id="download_py"><a href="#">Python (.py)</a></li>
63 <li id="download_py"><a href="#">Python (.py)</a></li>
64 </ul>
64 </ul>
65 </li>
65 </li>
66 <hr/>
66 <hr/>
67 <li id="print_notebook"><a href="/{{notebook_id}}/print" target="_blank">Print View</a></li>
67 <li id="print_notebook"><a href="/{{notebook_id}}/print" target="_blank">Print View</a></li>
68 <hr/>
68 <hr/>
69 <li id="kill_and_exit"><a href="#" >Close and halt</a></li>
69 <li id="kill_and_exit"><a href="#" >Close and halt</a></li>
70 </ul>
70 </ul>
71 </li>
71 </li>
72 <li><a href="#">Edit</a>
72 <li><a href="#">Edit</a>
73 <ul>
73 <ul>
74 <li id="cut_cell"><a href="#">Cut Cell</a></li>
74 <li id="cut_cell"><a href="#">Cut Cell</a></li>
75 <li id="copy_cell"><a href="#">Copy Cell</a></li>
75 <li id="copy_cell"><a href="#">Copy Cell</a></li>
76 <li id="paste_cell" class="ui-state-disabled"><a href="#">Paste Cell</a></li>
76 <li id="paste_cell" class="ui-state-disabled"><a href="#">Paste Cell</a></li>
77 <li id="paste_cell_above" class="ui-state-disabled"><a href="#">Paste Cell Above</a></li>
77 <li id="paste_cell_above" class="ui-state-disabled"><a href="#">Paste Cell Above</a></li>
78 <li id="paste_cell_below" class="ui-state-disabled"><a href="#">Paste Cell Below</a></li>
78 <li id="paste_cell_below" class="ui-state-disabled"><a href="#">Paste Cell Below</a></li>
79 <li id="delete_cell"><a href="#">Delete</a></li>
79 <li id="delete_cell"><a href="#">Delete</a></li>
80 <hr/>
80 <hr/>
81 <li id="split_cell"><a href="#">Split Cell</a></li>
81 <li id="split_cell"><a href="#">Split Cell</a></li>
82 <li id="merge_cell_above"><a href="#">Merge Cell Above</a></li>
82 <li id="merge_cell_above"><a href="#">Merge Cell Above</a></li>
83 <li id="merge_cell_below"><a href="#">Merge Cell Below</a></li>
83 <li id="merge_cell_below"><a href="#">Merge Cell Below</a></li>
84 <hr/>
84 <hr/>
85 <li id="move_cell_up"><a href="#">Move Cell Up</a></li>
85 <li id="move_cell_up"><a href="#">Move Cell Up</a></li>
86 <li id="move_cell_down"><a href="#">Move Cell Down</a></li>
86 <li id="move_cell_down"><a href="#">Move Cell Down</a></li>
87 <hr/>
87 <hr/>
88 <li id="select_previous"><a href="#">Select Previous Cell</a></li>
88 <li id="select_previous"><a href="#">Select Previous Cell</a></li>
89 <li id="select_next"><a href="#">Select Next Cell</a></li>
89 <li id="select_next"><a href="#">Select Next Cell</a></li>
90 </ul>
90 </ul>
91 </li>
91 </li>
92 <li><a href="#">View</a>
92 <li><a href="#">View</a>
93 <ul>
93 <ul>
94 <li id="toggle_header"><a href="#">Toggle Header</a></li>
94 <li id="toggle_header"><a href="#">Toggle Header</a></li>
95 <li id="toggle_toolbar"><a href="#">Toggle Toolbar</a></li>
95 <li id="toggle_toolbar"><a href="#">Toggle Toolbar</a></li>
96 </ul>
96 </ul>
97 </li>
97 </li>
98 <li><a href="#">Insert</a>
98 <li><a href="#">Insert</a>
99 <ul>
99 <ul>
100 <li id="insert_cell_above"><a href="#">Insert Cell Above</a></li>
100 <li id="insert_cell_above"><a href="#">Insert Cell Above</a></li>
101 <li id="insert_cell_below"><a href="#">Insert Cell Below</a></li>
101 <li id="insert_cell_below"><a href="#">Insert Cell Below</a></li>
102 </ul>
102 </ul>
103 </li>
103 </li>
104 <li><a href="#">Cell</a>
104 <li><a href="#">Cell</a>
105 <ul>
105 <ul>
106 <li id="run_cell"><a href="#">Run</a></li>
106 <li id="run_cell"><a href="#">Run</a></li>
107 <li id="run_cell_in_place"><a href="#">Run in Place</a></li>
107 <li id="run_cell_in_place"><a href="#">Run in Place</a></li>
108 <li id="run_all_cells"><a href="#">Run All</a></li>
108 <li id="run_all_cells"><a href="#">Run All</a></li>
109 <hr/>
109 <hr/>
110 <li id="to_code"><a href="#">Code</a></li>
110 <li id="to_code"><a href="#">Code</a></li>
111 <li id="to_markdown"><a href="#">Markdown </a></li>
111 <li id="to_markdown"><a href="#">Markdown </a></li>
112 <li id="to_raw"><a href="#">Raw Text</a></li>
112 <li id="to_raw"><a href="#">Raw Text</a></li>
113 <li id="to_heading1"><a href="#">Heading 1</a></li>
113 <li id="to_heading1"><a href="#">Heading 1</a></li>
114 <li id="to_heading2"><a href="#">Heading 2</a></li>
114 <li id="to_heading2"><a href="#">Heading 2</a></li>
115 <li id="to_heading3"><a href="#">Heading 3</a></li>
115 <li id="to_heading3"><a href="#">Heading 3</a></li>
116 <li id="to_heading4"><a href="#">Heading 4</a></li>
116 <li id="to_heading4"><a href="#">Heading 4</a></li>
117 <li id="to_heading5"><a href="#">Heading 5</a></li>
117 <li id="to_heading5"><a href="#">Heading 5</a></li>
118 <li id="to_heading6"><a href="#">Heading 6</a></li>
118 <li id="to_heading6"><a href="#">Heading 6</a></li>
119 <hr/>
119 <hr/>
120 <li id="toggle_output"><a href="#">Toggle Output</a></li>
120 <li id="toggle_output"><a href="#">Toggle Output</a></li>
121 <li id="clear_all_output"><a href="#">Clear All Output</a></li>
121 <li id="clear_all_output"><a href="#">Clear All Output</a></li>
122 </ul>
122 </ul>
123 </li>
123 </li>
124 <li><a href="#">Kernel</a>
124 <li><a href="#">Kernel</a>
125 <ul>
125 <ul>
126 <li id="int_kernel"><a href="#">Interrupt</a></li>
126 <li id="int_kernel"><a href="#">Interrupt</a></li>
127 <li id="restart_kernel"><a href="#">Restart</a></li>
127 <li id="restart_kernel"><a href="#">Restart</a></li>
128 </ul>
128 </ul>
129 </li>
129 </li>
130 <li><a href="#">Help</a>
130 <li><a href="#">Help</a>
131 <ul>
131 <ul>
132 <li><a href="http://ipython.org/documentation.html" target="_blank">IPython Help</a></li>
132 <li><a href="http://ipython.org/documentation.html" target="_blank">IPython Help</a></li>
133 <li><a href="http://ipython.org/ipython-doc/stable/interactive/htmlnotebook.html" target="_blank">Notebook Help</a></li>
133 <li><a href="http://ipython.org/ipython-doc/stable/interactive/htmlnotebook.html" target="_blank">Notebook Help</a></li>
134 <li id="keyboard_shortcuts"><a href="#">Keyboard Shortcuts</a></li>
134 <li id="keyboard_shortcuts"><a href="#">Keyboard Shortcuts</a></li>
135 <hr/>
135 <hr/>
136 <li><a href="http://docs.python.org" target="_blank">Python</a></li>
136 <li><a href="http://docs.python.org" target="_blank">Python</a></li>
137 <li><a href="http://docs.scipy.org/doc/numpy/reference/" target="_blank">NumPy</a></li>
137 <li><a href="http://docs.scipy.org/doc/numpy/reference/" target="_blank">NumPy</a></li>
138 <li><a href="http://docs.scipy.org/doc/scipy/reference/" target="_blank">SciPy</a></li>
138 <li><a href="http://docs.scipy.org/doc/scipy/reference/" target="_blank">SciPy</a></li>
139 <li><a href="http://docs.sympy.org/dev/index.html" target="_blank">SymPy</a></li>
139 <li><a href="http://docs.sympy.org/dev/index.html" target="_blank">SymPy</a></li>
140 <li><a href="http://matplotlib.sourceforge.net/" target="_blank">Matplotlib</a></li>
140 <li><a href="http://matplotlib.sourceforge.net/" target="_blank">Matplotlib</a></li>
141 </ul>
141 </ul>
142 </li>
142 </li>
143 </ul>
143 </ul>
144
144
145 </div>
145 </div>
146 <div id="notification"></div>
146 <div id="notification"></div>
147 </div>
147 </div>
148
148
149
149
150 <div id="toolbar">
150 <div id="toolbar">
151
151
152 <span>
152 <span>
153 <button id="save_b">Save</button>
153 <button id="save_b">Save</button>
154 </span>
154 </span>
155 <span id="cut_copy_paste">
155 <span id="cut_copy_paste">
156 <button id="cut_b" title="Cut Cell">Cut Cell</button>
156 <button id="cut_b" title="Cut Cell">Cut Cell</button>
157 <button id="copy_b" title="Copy Cell">Copy Cell</button>
157 <button id="copy_b" title="Copy Cell">Copy Cell</button>
158 <button id="paste_b" title="Paste Cell">Paste Cell</button>
158 <button id="paste_b" title="Paste Cell">Paste Cell</button>
159 </span>
159 </span>
160 <span id="move_up_down">
160 <span id="move_up_down">
161 <button id="move_up_b" title="Move Cell Up">Move Cell Up</button>
161 <button id="move_up_b" title="Move Cell Up">Move Cell Up</button>
162 <button id="move_down_b" title="Move Cell Down">Move Down</button>
162 <button id="move_down_b" title="Move Cell Down">Move Down</button>
163 </span>
163 </span>
164 <span id="insert_above_below">
164 <span id="insert_above_below">
165 <button id="insert_above_b" title="Insert Cell Above">Insert Cell Above</button>
165 <button id="insert_above_b" title="Insert Cell Above">Insert Cell Above</button>
166 <button id="insert_below_b" title="Insert Cell Below">Insert Cell Below</button>
166 <button id="insert_below_b" title="Insert Cell Below">Insert Cell Below</button>
167 </span>
167 </span>
168 <span id="run_int">
168 <span id="run_int">
169 <button id="run_b" title="Run Cell">Run Cell</button>
169 <button id="run_b" title="Run Cell">Run Cell</button>
170 <button id="interrupt_b" title="Interrupt">Interrupt</button>
170 <button id="interrupt_b" title="Interrupt">Interrupt</button>
171 </span>
171 </span>
172 <span>
172 <span>
173 <select id="cell_type">
173 <select id="cell_type">
174 <option value="code">Code</option>
174 <option value="code">Code</option>
175 <option value="markdown">Markdown</option>
175 <option value="markdown">Markdown</option>
176 <option value="raw">Raw Text</option>
176 <option value="raw">Raw Text</option>
177 <option value="heading1">Heading 1</option>
177 <option value="heading1">Heading 1</option>
178 <option value="heading2">Heading 2</option>
178 <option value="heading2">Heading 2</option>
179 <option value="heading3">Heading 3</option>
179 <option value="heading3">Heading 3</option>
180 <option value="heading4">Heading 4</option>
180 <option value="heading4">Heading 4</option>
181 <option value="heading5">Heading 5</option>
181 <option value="heading5">Heading 5</option>
182 <option value="heading6">Heading 6</option>
182 <option value="heading6">Heading 6</option>
183 </select>
183 </select>
184 </span>
184 </span>
185
185
186 </div>
186 </div>
187
187
188 <div id="main_app">
188 <div id="main_app">
189
189
190 <div id="notebook_panel">
190 <div id="notebook_panel">
191 <div id="notebook"></div>
191 <div id="notebook"></div>
192 <div id="pager_splitter"></div>
192 <div id="pager_splitter"></div>
193 <div id="pager"></div>
193 <div id="pager"></div>
194 </div>
194 </div>
195
195
196 </div>
196 </div>
197 <div id='tooltip' class='tooltip ui-corner-all hidden hide'></div>
197 <div id='tooltip' class='tooltip ui-corner-all' style='display:none'></div>
198
198
199
199
200 {% end %}
200 {% end %}
201
201
202
202
203 {% block script %}
203 {% block script %}
204
204
205 <script src="{{ static_url("codemirror/lib/codemirror.js") }}" charset="utf-8"></script>
205 <script src="{{ static_url("codemirror/lib/codemirror.js") }}" charset="utf-8"></script>
206 <script src="{{ static_url("codemirror/mode/python/python.js") }}" charset="utf-8"></script>
206 <script src="{{ static_url("codemirror/mode/python/python.js") }}" charset="utf-8"></script>
207 <script src="{{ static_url("codemirror/mode/htmlmixed/htmlmixed.js") }}" charset="utf-8"></script>
207 <script src="{{ static_url("codemirror/mode/htmlmixed/htmlmixed.js") }}" charset="utf-8"></script>
208 <script src="{{ static_url("codemirror/mode/xml/xml.js") }}" charset="utf-8"></script>
208 <script src="{{ static_url("codemirror/mode/xml/xml.js") }}" charset="utf-8"></script>
209 <script src="{{ static_url("codemirror/mode/javascript/javascript.js") }}" charset="utf-8"></script>
209 <script src="{{ static_url("codemirror/mode/javascript/javascript.js") }}" charset="utf-8"></script>
210 <script src="{{ static_url("codemirror/mode/css/css.js") }}" charset="utf-8"></script>
210 <script src="{{ static_url("codemirror/mode/css/css.js") }}" charset="utf-8"></script>
211 <script src="{{ static_url("codemirror/mode/rst/rst.js") }}" charset="utf-8"></script>
211 <script src="{{ static_url("codemirror/mode/rst/rst.js") }}" charset="utf-8"></script>
212 <script src="{{ static_url("codemirror/mode/markdown/markdown.js") }}" charset="utf-8"></script>
212 <script src="{{ static_url("codemirror/mode/markdown/markdown.js") }}" charset="utf-8"></script>
213
213
214 <script src="{{ static_url("pagedown/Markdown.Converter.js") }}" charset="utf-8"></script>
214 <script src="{{ static_url("pagedown/Markdown.Converter.js") }}" charset="utf-8"></script>
215
215
216 <script src="{{ static_url("prettify/prettify.js") }}" charset="utf-8"></script>
216 <script src="{{ static_url("prettify/prettify.js") }}" charset="utf-8"></script>
217 <script src="{{ static_url("dateformat/date.format.js") }}" charset="utf-8"></script>
217 <script src="{{ static_url("dateformat/date.format.js") }}" charset="utf-8"></script>
218
218
219 <script src="{{ static_url("js/events.js") }}" type="text/javascript" charset="utf-8"></script>
219 <script src="{{ static_url("js/events.js") }}" type="text/javascript" charset="utf-8"></script>
220 <script src="{{ static_url("js/utils.js") }}" type="text/javascript" charset="utf-8"></script>
220 <script src="{{ static_url("js/utils.js") }}" type="text/javascript" charset="utf-8"></script>
221 <script src="{{ static_url("js/layoutmanager.js") }}" type="text/javascript" charset="utf-8"></script>
221 <script src="{{ static_url("js/layoutmanager.js") }}" type="text/javascript" charset="utf-8"></script>
222 <script src="{{ static_url("js/initmathjax.js") }}" type="text/javascript" charset="utf-8"></script>
222 <script src="{{ static_url("js/initmathjax.js") }}" type="text/javascript" charset="utf-8"></script>
223 <script src="{{ static_url("js/outputarea.js") }}" type="text/javascript" charset="utf-8"></script>
223 <script src="{{ static_url("js/outputarea.js") }}" type="text/javascript" charset="utf-8"></script>
224 <script src="{{ static_url("js/cell.js") }}" type="text/javascript" charset="utf-8"></script>
224 <script src="{{ static_url("js/cell.js") }}" type="text/javascript" charset="utf-8"></script>
225 <script src="{{ static_url("js/codecell.js") }}" type="text/javascript" charset="utf-8"></script>
225 <script src="{{ static_url("js/codecell.js") }}" type="text/javascript" charset="utf-8"></script>
226 <script src="{{ static_url("js/completer.js") }}" type="text/javascript" charset="utf-8"></script>
226 <script src="{{ static_url("js/completer.js") }}" type="text/javascript" charset="utf-8"></script>
227 <script src="{{ static_url("js/textcell.js") }}" type="text/javascript" charset="utf-8"></script>
227 <script src="{{ static_url("js/textcell.js") }}" type="text/javascript" charset="utf-8"></script>
228 <script src="{{ static_url("js/kernel.js") }}" type="text/javascript" charset="utf-8"></script>
228 <script src="{{ static_url("js/kernel.js") }}" type="text/javascript" charset="utf-8"></script>
229 <script src="{{ static_url("js/savewidget.js") }}" type="text/javascript" charset="utf-8"></script>
229 <script src="{{ static_url("js/savewidget.js") }}" type="text/javascript" charset="utf-8"></script>
230 <script src="{{ static_url("js/quickhelp.js") }}" type="text/javascript" charset="utf-8"></script>
230 <script src="{{ static_url("js/quickhelp.js") }}" type="text/javascript" charset="utf-8"></script>
231 <script src="{{ static_url("js/pager.js") }}" type="text/javascript" charset="utf-8"></script>
231 <script src="{{ static_url("js/pager.js") }}" type="text/javascript" charset="utf-8"></script>
232 <script src="{{ static_url("js/menubar.js") }}" type="text/javascript" charset="utf-8"></script>
232 <script src="{{ static_url("js/menubar.js") }}" type="text/javascript" charset="utf-8"></script>
233 <script src="{{ static_url("js/toolbar.js") }}" type="text/javascript" charset="utf-8"></script>
233 <script src="{{ static_url("js/toolbar.js") }}" type="text/javascript" charset="utf-8"></script>
234 <script src="{{ static_url("js/notebook.js") }}" type="text/javascript" charset="utf-8"></script>
234 <script src="{{ static_url("js/notebook.js") }}" type="text/javascript" charset="utf-8"></script>
235 <script src="{{ static_url("js/notificationwidget.js") }}" type="text/javascript" charset="utf-8"></script>
235 <script src="{{ static_url("js/notificationwidget.js") }}" type="text/javascript" charset="utf-8"></script>
236 <script src="{{ static_url("js/tooltip.js") }}" type="text/javascript" charset="utf-8"></script>
236 <script src="{{ static_url("js/tooltip.js") }}" type="text/javascript" charset="utf-8"></script>
237 <script src="{{ static_url("js/notebookmain.js") }}" type="text/javascript" charset="utf-8"></script>
237 <script src="{{ static_url("js/notebookmain.js") }}" type="text/javascript" charset="utf-8"></script>
238
238
239 <script src="{{ static_url("js/contexthint.js") }} charset="utf-8"></script>
239 <script src="{{ static_url("js/contexthint.js") }} charset="utf-8"></script>
240
240
241 {% end %}
241 {% end %}
General Comments 0
You need to be logged in to leave comments. Login now