Skip to content

Commit

Permalink
use _safe_append for all output
Browse files Browse the repository at this point in the history
catches js errors appending anything to output,
including javascript in an HTML output.

closes ipython#4095
  • Loading branch information
minrk committed Aug 29, 2013
1 parent e4216d0 commit b38d9e8
Showing 1 changed file with 32 additions and 25 deletions.
57 changes: 32 additions & 25 deletions IPython/html/static/notebook/js/outputarea.js
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,33 @@ var IPython = (function (IPython) {
}
return oa;
};

OutputArea.prototype._append_javascript_error = function (err, container) {
// display a message when a javascript error occurs in display output
var msg = "Javascript error adding output!"
console.log(msg, err);
if ( container === undefined ) return;
container.append(
$('<div/>').html(msg + "<br/>" +
err.toString() +
'<br/>See your browser Javascript console for more details.'
).addClass('js-error')
);
container.show();
};

OutputArea.prototype._safe_append = function (toinsert) {
// safely append an item to the document
// this is an object created by user code,
// and may have errors, which should not be raised
// under any circumstances.
try {
this.element.append(toinsert);
} catch(err) {
console.log(err);
this._append_javascript_error(err, this.element);
}
};


OutputArea.prototype.append_pyout = function (json, dynamic) {
Expand All @@ -321,19 +348,7 @@ var IPython = (function (IPython) {
toinsert.find('div.prompt').addClass('output_prompt').html('Out[' + n + ']:');
}
this.append_mime_type(json, toinsert, dynamic);
try {
this.element.append(toinsert);
} catch(err) {
console.log("Error attaching output!");
console.log(err);
this.element.show();
toinsert.html($('<div/>')
.html("Javascript error adding output!<br/>" +
err.toString() +
'<br/>See your browser Javascript console for more details.')
.addClass('js-error')
);
}
this._safe_append(toinsert);
// If we just output latex, typeset it.
if ((json.latex !== undefined) || (json.html !== undefined)) {
this.typeset();
Expand All @@ -352,7 +367,7 @@ var IPython = (function (IPython) {
s = s + '\n';
var toinsert = this.create_output_area();
this.append_text(s, {}, toinsert);
this.element.append(toinsert);
this._safe_append(toinsert);
}
};

Expand Down Expand Up @@ -389,14 +404,14 @@ var IPython = (function (IPython) {
// If we got here, attach a new div
var toinsert = this.create_output_area();
this.append_text(text, {}, toinsert, "output_stream "+subclass);
this.element.append(toinsert);
this._safe_append(toinsert);
};


OutputArea.prototype.append_display_data = function (json, dynamic) {
var toinsert = this.create_output_area();
this.append_mime_type(json, toinsert, dynamic);
this.element.append(toinsert);
this._safe_append(toinsert);
// If we just output latex, typeset it.
if ( (json.latex !== undefined) || (json.html !== undefined) ) {
this.typeset();
Expand Down Expand Up @@ -444,15 +459,7 @@ var IPython = (function (IPython) {
try {
eval(js);
} catch(err) {
console.log('Error in Javascript!');
console.log(err);
container.show();
element.append($('<div/>')
.html("Error in Javascript !<br/>"+
err.toString()+
'<br/>See your browser Javascript console for more details.')
.addClass('js-error')
);
this._append_javascript_error(err, container);
}
};

Expand Down

0 comments on commit b38d9e8

Please sign in to comment.