Chromium Code Reviews| Index: Source/devtools/front_end/console/ConsoleViewMessage.js |
| diff --git a/Source/devtools/front_end/console/ConsoleViewMessage.js b/Source/devtools/front_end/console/ConsoleViewMessage.js |
| index bc3a72d12b0d7065fe7b8c8190a76e4ea757d672..1f6a5734cc70de720cf0eb6dfed8a1931541f06a 100644 |
| --- a/Source/devtools/front_end/console/ConsoleViewMessage.js |
| +++ b/Source/devtools/front_end/console/ConsoleViewMessage.js |
| @@ -166,8 +166,11 @@ WebInspector.ConsoleViewMessage.prototype = { |
| this._messageElement = this._format([consoleMessage.messageText]); |
| break; |
| default: |
| + if (consoleMessage.parameters && consoleMessage.parameters.length === 1 && consoleMessage.parameters[0].type === "string") |
| + this._messageElement = this._tryFormatAsError(/**@type {string} */(consoleMessage.parameters[0].value)); |
| + |
| var args = consoleMessage.parameters || [consoleMessage.messageText]; |
| - this._messageElement = this._format(args); |
| + this._messageElement = this._messageElement || this._format(args); |
| } |
| } else if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.Network) { |
| if (consoleMessage.request) { |
| @@ -1264,6 +1267,69 @@ WebInspector.ConsoleViewMessage.prototype = { |
| { |
| return this._message.messageText; |
| }, |
| + |
| + /** |
| + * @param {string} string |
| + * @return {?Element} |
| + */ |
| + _tryFormatAsError: function(string) |
| + { |
| + if (!string.startsWith("Error")) |
| + return null; |
| + |
| + var lines = string.split("\n"); |
| + var beforeAts = true; |
| + //check format |
| + for (var i = 0; i < lines.length; ++i) { |
|
vsevik
2014/10/23 08:40:57
var i = 0;
for (; i < lines.length && !lines[i].tr
|
| + var atLine = lines[i].trim().startsWith("at"); |
| + if (beforeAts && atLine) { |
| + beforeAts = false; |
| + continue; |
| + } |
| + if (!beforeAts && !atLine) |
| + return null; |
| + } |
| + |
| + if (beforeAts) |
| + return null; |
| + |
| + var formattedResult = createElement("span"); |
| + for (var i = 0; i < lines.length; ++i) { |
|
vsevik
2014/10/23 08:40:57
for (var i = 0; i < firstAtLineIndex; ++i) {
...
|
| + var atLine = lines[i].trim().startsWith("at "); |
| + if (!atLine) |
| + formattedResult.appendChild(this._linkifier.linkifyStringAsFragment(this._target(), lines[i] + "\n")); |
| + else { |
| + var openBracket = lines[i].indexOf("("); |
| + var closeBracket = lines[i].indexOf(")"); |
| + var left = openBracket === -1 ? lines[i].indexOf("at") + 3 : openBracket + 1; |
| + var right = closeBracket === -1? lines[i].length : closeBracket; |
| + formattedResult.appendChild(createTextNode(lines[i].substring(0, left))); |
| + var toAppend = this._parseLink(lines[i].substring(left, right)); |
|
vsevik
2014/10/23 08:40:57
We need to check that this line matches some very
|
| + formattedResult.appendChild(toAppend); |
| + formattedResult.appendChild(createTextNode(lines[i].substring(right, lines[i].length) + "\n")) |
| + } |
| + |
| + } |
| + return formattedResult; |
| + }, |
| + |
| + /** |
| + * @param {string} link |
| + * @return {!Node} |
| + */ |
| + _parseLink: function(link) |
| + { |
| + var splitResult = WebInspector.ParsedURL.splitLineAndColumn(link); |
| + if (!splitResult) { |
|
vsevik
2014/10/23 10:47:27
extra {
|
| + return this._linkifier.linkifyStringAsFragment(this._target(), link); |
| + } |
| + |
| + var parsed = splitResult.url.asParsedURL(); |
| + if (!parsed) |
| + parsed = new WebInspector.ParsedURL(WebInspector.targetManager.inspectedPageURL() + splitResult.url); |
| + |
| + return parsed.isValid ? this._linkifier.linkifyScriptLocation(this._target(), null, splitResult.url, splitResult.lineNumber, splitResult.columnNumber) : createTextNode(link); |
|
vsevik
2014/10/23 10:47:27
Shouldn't we use parsed here?
|
| + } |
| } |
| /** |