diff --git a/IPython/frontend/html/notebook/static/js/codecell.js b/IPython/frontend/html/notebook/static/js/codecell.js index 0addd73..cc47079 100644 --- a/IPython/frontend/html/notebook/static/js/codecell.js +++ b/IPython/frontend/html/notebook/static/js/codecell.js @@ -84,7 +84,7 @@ var IPython = (function (IPython) { // whatever key is pressed, first, cancel the tooltip request before // they are sent, and remove tooltip if any if(event.type === 'keydown' ) { - that.remove_and_cancel_tooltip(); + IPython.tooltip.remove_and_cancel_tooltip(); }; @@ -159,16 +159,6 @@ var IPython = (function (IPython) { return false; }; - CodeCell.prototype.remove_and_cancel_tooltip = function() { - // note that we don't handle closing directly inside the calltip - // as in the completer, because it is not focusable, so won't - // get the event. - if (this.tooltip_timeout != null){ - clearTimeout(this.tooltip_timeout); - $('#tooltip').addClass('hidden'); - this.tooltip_timeout = null; - } - } CodeCell.prototype.finish_tooltip = function (reply) { IPython.tooltip.show(reply,this.code_mirror.cursorCoords()); @@ -218,7 +208,7 @@ var IPython = (function (IPython) { morelink.click(function(){ var msg_id = IPython.notebook.kernel.execute(name+"?"); IPython.notebook.msg_cell_map[msg_id] = IPython.notebook.get_selected_cell().cell_id; - that.remove_and_cancel_tooltip(); + IPython.tooltip.remove_and_cancel_tooltip(); setTimeout(function(){that.code_mirror.focus();}, 50); }); @@ -232,7 +222,7 @@ var IPython = (function (IPython) { closespan.addClass('ui-icon-close'); closelink.append(closespan); closelink.click(function(){ - that.remove_and_cancel_tooltip(); + IPython.tooltip.remove_and_cancel_tooltip(); setTimeout(function(){that.code_mirror.focus();}, 50); }); //construct the tooltip diff --git a/IPython/frontend/html/notebook/static/js/tooltip.js b/IPython/frontend/html/notebook/static/js/tooltip.js index 18be999..014f1d1 100644 --- a/IPython/frontend/html/notebook/static/js/tooltip.js +++ b/IPython/frontend/html/notebook/static/js/tooltip.js @@ -12,12 +12,15 @@ // Todo : // use codemirror highlight example to // highlight the introspection request and introspect on mouse hove ... +// +// var IPython = (function (IPython) { var utils = IPython.utils; var Tooltip = function (notebook) { this.tooltip = $('#tooltip'); + var that = this; // contain the button in the upper right corner this.buttons = $('
') @@ -41,7 +44,7 @@ var IPython = (function (IPython) { .click(function(){ text.removeClass('smalltooltip'); text.addClass('bigtooltip'); - $('#expanbutton').remove(); + $('#expanbutton').addClass('hidden'); //setTimeout(function(){that.code_mirror.focus();}, 50); }) .append( @@ -74,7 +77,7 @@ var IPython = (function (IPython) { closespan.addClass('ui-icon-close'); closelink.append(closespan); closelink.click(function(){ - tooltip.addClass('hide'); + that.hide(); }); //construct the tooltip @@ -92,7 +95,17 @@ var IPython = (function (IPython) { this.tooltip.append(this.text); }; - + // deal with all the logic of hiding the tooltip + // and reset it's status + Tooltip.prototype.hide = function() + { + this.tooltip.addClass('hide'); + $('#expanbutton').removeClass('hidden'); + this.text.removeClass('bigtooltip'); + this.text.addClass('smalltooltip'); + // keep scroll top to be sure to always see the first line + this.text.scrollTop(0); + } //TODO, try to diminish the number of parameters. Tooltip.prototype.request_tooltip_after_time = function (pre_cursor,time){ @@ -103,12 +116,13 @@ var IPython = (function (IPython) { // note that we don't handle closing directly inside the calltip // as in the completer, because it is not focusable, so won't // get the event. + this.hide(); if (this.tooltip_timeout != null){ clearTimeout(this.tooltip_timeout); - $('#tooltip').remove(); this.tooltip_timeout = null; } } + Tooltip.prototype.show = function(reply,pos) { this.tooltip.css('left',pos.x-30+'px'); @@ -133,7 +147,9 @@ var IPython = (function (IPython) { var defstring_html = $('').html(utils.fixConsole(defstring)); this.text.append(defstring_html); } - this.text.append(pre) + this.text.append(pre); + // keep scroll top to be sure to always see the first line + this.text.scrollTop(0); } @@ -145,60 +161,6 @@ var IPython = (function (IPython) { setTimeout(function(){that.code_mirror.focus();}, 50); } - Tooltip.prototype.finish_tooltip = function (reply) { - - var expandlink=$('').attr('href',"#"); - expandlink.addClass("ui-corner-all"); //rounded corner - expandlink.attr('role',"button"); - - var expandspan=$('').text('Expand'); - expandspan.addClass('ui-icon'); - expandspan.addClass('ui-icon-plus'); - - expandlink.append(expandspan); - expandlink.attr('id','expanbutton'); - expandlink.click(function(){ - tooltip.removeClass('smalltooltip'); - tooltip.addClass('bigtooltip'); - $('#expanbutton').remove(); - setTimeout(function(){that.code_mirror.focus();}, 50); - }); - - var morelink=$('').attr('href',"#"); - morelink.attr('role',"button"); - morelink.addClass('ui-button'); - var morespan=$('').text('Open in Pager'); - morespan.addClass('ui-icon'); - morespan.addClass('ui-icon-arrowstop-l-n'); - morelink.append(morespan); - morelink.click(function(){ - this.showInPager(); - }); - - - var closelink=$('').attr('href',"#"); - closelink.attr('role',"button"); - closelink.addClass('ui-button'); - - var closespan=$('').text('Close'); - closespan.addClass('ui-icon'); - closespan.addClass('ui-icon-close'); - closelink.append(closespan); - closelink.click(function(){ - that.remove_and_cancel_tooltip(); - setTimeout(function(){that.code_mirror.focus();}, 50); - }); - //construct the tooltip - tooltip.append(closelink); - tooltip.append(expandlink); - tooltip.append(morelink); - - var pos = this.code_mirror.cursorCoords(); - tooltip.css('left',pos.x+'px'); - tooltip.css('top',pos.yBot+'px'); - - }; - IPython.Tooltip = Tooltip;