Merge pull request #4229 from jdfreder/clearoutput

Clear_output: Animation & widget related changes.
This commit is contained in:
Brian E. Granger 2013-09-23 14:07:18 -07:00
commit 54c751ce50
3 changed files with 31 additions and 72 deletions

View File

@ -241,7 +241,7 @@ var IPython = (function (IPython) {
* @method execute
*/
CodeCell.prototype.execute = function () {
this.output_area.clear_output(true, true, true);
this.output_area.clear_output();
this.set_input_prompt('*');
this.element.addClass("running");
if (this.last_msg_id) {
@ -390,8 +390,8 @@ var IPython = (function (IPython) {
};
CodeCell.prototype.clear_output = function (stdout, stderr, other) {
this.output_area.clear_output(stdout, stderr, other);
CodeCell.prototype.clear_output = function (wait) {
this.output_area.clear_output(wait);
};

View File

@ -1339,7 +1339,7 @@ var IPython = (function (IPython) {
var cells = this.get_cells();
for (var i=0; i<ncells; i++) {
if (cells[i] instanceof IPython.CodeCell) {
cells[i].clear_output(true,true,true);
cells[i].clear_output();
// Make all In[] prompts blank, as well
// TODO: make this configurable (via checkbox?)
cells[i].set_input_prompt();

View File

@ -31,7 +31,7 @@ var IPython = (function (IPython) {
this.outputs = [];
this.collapsed = false;
this.scrolled = false;
this.clear_out_timeout = null;
this.clear_queued = null;
if (prompt_area === undefined) {
this.prompt_area = true;
} else {
@ -289,7 +289,12 @@ var IPython = (function (IPython) {
OutputArea.prototype.append_output = function (json, dynamic) {
// If dynamic is true, javascript output will be eval'd.
this.expand();
this.flush_clear_timeout();
// Clear the output if clear is queued.
if (this.clear_queued) {
this.clear_output(false);
}
if (json.output_type === 'pyout') {
this.append_pyout(json, dynamic);
} else if (json.output_type === 'pyerr') {
@ -300,6 +305,7 @@ var IPython = (function (IPython) {
this.append_stream(json);
}
this.outputs.push(json);
this.element.height('auto');
var that = this;
setTimeout(function(){that.element.trigger('resize');}, 100);
};
@ -553,7 +559,6 @@ var IPython = (function (IPython) {
OutputArea.prototype.append_raw_input = function (content) {
var that = this;
this.expand();
this.flush_clear_timeout();
var area = this.create_output_area();
// disable any other raw_inputs, if they are left around
@ -606,81 +611,35 @@ var IPython = (function (IPython) {
OutputArea.prototype.handle_clear_output = function (content) {
this.clear_output(content.stdout, content.stderr, content.other);
this.clear_output(content.wait);
};
OutputArea.prototype.clear_output = function (stdout, stderr, other) {
var that = this;
if (this.clear_out_timeout != null){
// fire previous pending clear *immediately*
clearTimeout(this.clear_out_timeout);
this.clear_out_timeout = null;
this.clear_output_callback(this._clear_stdout, this._clear_stderr, this._clear_other);
}
// store flags for flushing the timeout
this._clear_stdout = stdout;
this._clear_stderr = stderr;
this._clear_other = other;
this.clear_out_timeout = setTimeout(function() {
// really clear timeout only after a short delay
// this reduces flicker in 'clear_output; print' cases
that.clear_out_timeout = null;
that._clear_stdout = that._clear_stderr = that._clear_other = null;
that.clear_output_callback(stdout, stderr, other);
}, 500
);
};
OutputArea.prototype.clear_output = function(wait) {
if (wait) {
// If a clear is queued, clear before adding another to the queue.
if (this.clear_queued) {
this.clear_output(false);
};
OutputArea.prototype.clear_output_callback = function (stdout, stderr, other) {
var output_div = this.element;
this.clear_queued = true;
} else {
if (stdout && stderr && other){
// Fix the output div's height if the clear_output is waiting for
// new output (it is being used in an animation).
if (this.clear_queued) {
var height = this.element.height();
this.element.height(height);
this.clear_queued = false;
}
// clear all, no need for logic
output_div.html("");
this.element.html("");
this.outputs = [];
this.unscroll_area();
return;
}
// remove html output
// each output_subarea that has an identifying class is in an output_area
// which is the element to be removed.
if (stdout) {
output_div.find("div.output_stdout").parent().remove();
}
if (stderr) {
output_div.find("div.output_stderr").parent().remove();
}
if (other) {
output_div.find("div.output_subarea").not("div.output_stderr").not("div.output_stdout").parent().remove();
}
this.unscroll_area();
// remove cleared outputs from JSON list:
for (var i = this.outputs.length - 1; i >= 0; i--) {
var out = this.outputs[i];
var output_type = out.output_type;
if (output_type == "display_data" && other) {
this.outputs.splice(i,1);
} else if (output_type == "stream") {
if (stdout && out.stream == "stdout") {
this.outputs.splice(i,1);
} else if (stderr && out.stream == "stderr") {
this.outputs.splice(i,1);
}
}
}
};
OutputArea.prototype.flush_clear_timeout = function() {
var output_div = this.element;
if (this.clear_out_timeout){
clearTimeout(this.clear_out_timeout);
this.clear_out_timeout = null;
this.clear_output_callback(this._clear_stdout, this._clear_stderr, this._clear_other);
}
};
};