Skip to content

Commit

Permalink
Merge pull request ipython#4136 from minrk/catch-js
Browse files Browse the repository at this point in the history
catch javascript errors in any output

not just javascript.

catches js errors appending anything to the output area, such as js in HTML (ipython#4095).

closes ipython#4095
  • Loading branch information
minrk committed Sep 4, 2013
2 parents de9cb30 + b38d9e8 commit 47c255a
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 47c255a

Please sign in to comment.