Fixes the regression where error bubbles in source views always show
authortimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 30 Apr 2008 17:31:58 +0000 (17:31 +0000)
committertimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 30 Apr 2008 17:31:58 +0000 (17:31 +0000)
"undefined" for the content because the message property on
ConsoleMessage was removed. Adds support for a plain text formated
message that is stored in the message proeprty.

Reviewed by Adam Roben.

* page/inspector/Console.js:
(WebInspector.Console.prototype._format): Add a plainText argument that is passed to
the formatters.
(WebInspector.Console.prototype._formatvalue): Add a plainText argument, and a comment
about needing to honor it if the textContent of the output doesn't make sense.
(WebInspector.Console.prototype._formatvalue): Ditto.
(WebInspector.Console.prototype._formatstring): Ditto.
(WebInspector.Console.prototype._formatregexp): Ditto.
(WebInspector.Console.prototype._formatarray): Ditto.
(WebInspector.Console.prototype._formatnode): Ditto.
(WebInspector.Console.prototype._formatobject): Ditto.
(WebInspector.Console.prototype._formaterror): Ditto.
(WebInspector.ConsoleMessage): Call _format passing true for plainText. Get the
textContnet of the result and assign to the message proeprty. This property is
referenced from the SourceView.
(WebInspector.ConsoleMessage.prototype._format): Add a plainText argument. Build the
result element as a local and return it, instead of using formatedMessage directly.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@32731 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/page/inspector/Console.js

index 155e9c3..232c4f7 100644 (file)
@@ -1,5 +1,32 @@
 2008-04-30  Timothy Hatcher  <timothy@apple.com>
 
+        Fixes the regression where error bubbles in source views always show
+        "undefined" for the content because the message property on
+        ConsoleMessage was removed. Adds support for a plain text formated
+        message that is stored in the message proeprty.
+
+        Reviewed by Adam Roben.
+
+        * page/inspector/Console.js:
+        (WebInspector.Console.prototype._format): Add a plainText argument that is passed to
+        the formatters.
+        (WebInspector.Console.prototype._formatvalue): Add a plainText argument, and a comment
+        about needing to honor it if the textContent of the output doesn't make sense.
+        (WebInspector.Console.prototype._formatvalue): Ditto.
+        (WebInspector.Console.prototype._formatstring): Ditto.
+        (WebInspector.Console.prototype._formatregexp): Ditto.
+        (WebInspector.Console.prototype._formatarray): Ditto.
+        (WebInspector.Console.prototype._formatnode): Ditto.
+        (WebInspector.Console.prototype._formatobject): Ditto.
+        (WebInspector.Console.prototype._formaterror): Ditto.
+        (WebInspector.ConsoleMessage): Call _format passing true for plainText. Get the 
+        textContnet of the result and assign to the message proeprty. This property is 
+        referenced from the SourceView.
+        (WebInspector.ConsoleMessage.prototype._format): Add a plainText argument. Build the 
+        result element as a local and return it, instead of using formatedMessage directly.
+
+2008-04-30  Timothy Hatcher  <timothy@apple.com>
+
         Adds a helper function to convert a JSValueRef to a String.
 
         Reviewed by Adam Roben.
index ebac99b..6e3592d 100644 (file)
@@ -336,7 +336,7 @@ WebInspector.Console.prototype = {
         this.addMessage(new WebInspector.ConsoleCommand(str, result, this._format(result), level));
     },
 
-    _format: function(output)
+    _format: function(output, plainText)
     {
         var type = Object.type(output, InspectorController.inspectedWindow());
         if (type === "object") {
@@ -368,28 +368,33 @@ WebInspector.Console.prototype = {
 
         var span = document.createElement("span");
         span.addStyleClass("console-formatted-" + type);
-        this[formatter](output, span);
+        this[formatter](output, span, plainText);
         return span;
     },
 
-    _formatvalue: function(val, elem)
+    _formatvalue: function(val, elem, plainText)
     {
+        // Honor the plainText argument, if the textContent output doesn't make sense.
         elem.appendChild(document.createTextNode(val));
     },
 
-    _formatstring: function(str, elem)
+    _formatstring: function(str, elem, plainText)
     {
+        // Honor the plainText argument, if the textContent output doesn't make sense.
         elem.appendChild(document.createTextNode("\"" + str + "\""));
     },
 
-    _formatregexp: function(re, elem)
+    _formatregexp: function(re, elem, plainText)
     {
+        // Honor the plainText argument, if the textContent output doesn't make sense.
         var formatted = String(re).replace(/([\\\/])/g, "\\$1").replace(/\\(\/[gim]*)$/, "$1").substring(1);
         elem.appendChild(document.createTextNode(formatted));
     },
 
-    _formatarray: function(arr, elem)
+    _formatarray: function(arr, elem, plainText)
     {
+        // Honor the plainText argument, if the textContent output doesn't make sense.
+        // Especially if expanding array values is added.
         elem.appendChild(document.createTextNode("["));
         for (var i = 0; i < arr.length; ++i) {
             elem.appendChild(this._format(arr[i]));
@@ -399,8 +404,10 @@ WebInspector.Console.prototype = {
         elem.appendChild(document.createTextNode("]"));
     },
 
-    _formatnode: function(node, elem)
+    _formatnode: function(node, elem, plainText)
     {
+        // Honor the plainText argument, if the textContent output doesn't make sense.
+        // Especially if expanding to show children is added.
         var anchor = document.createElement("a");
         anchor.innerHTML = nodeTitleInfo.call(node).title;
         anchor.representedNode = node;
@@ -409,13 +416,16 @@ WebInspector.Console.prototype = {
         elem.appendChild(anchor);
     },
 
-    _formatobject: function(obj, elem)
+    _formatobject: function(obj, elem, plainText)
     {
+        // Honor the plainText argument, if the textContent output doesn't make sense.
+        // Especially if object properties are added.
         elem.appendChild(document.createTextNode(Object.describe(obj)));
     },
 
-    _formaterror: function(obj, elem)
+    _formaterror: function(obj, elem, plainText)
     {
+        // Honor the plainText argument, if the textContent output doesn't make sense.
         elem.appendChild(document.createTextNode(obj.name + ": " + obj.message + " "));
 
         if (obj.sourceURL) {
@@ -443,18 +453,23 @@ WebInspector.ConsoleMessage = function(source, level, line, url)
     this.line = line;
     this.url = url;
 
-    this._format(Array.prototype.slice.call(arguments, 4));
+    // This _format call passes in true for the plainText argument. The result's textContent is
+    // used for inline message bubbles in SourceFrames, or other plain-text representations.
+    this.message = this._format(Array.prototype.slice.call(arguments, 4), true).textContent;
+
+    // The formatedMessage property is used for the rich and interactive console.
+    this.formattedMessage = this._format(Array.prototype.slice.call(arguments, 4));
 }
 
 WebInspector.ConsoleMessage.prototype = {
-    _format: function(parameters)
+    _format: function(parameters, plainText)
     {
-        this.formattedMessage = document.createElement("span");
+        var formattedResult = document.createElement("span");
 
         if (!parameters.length)
-            return;
+            return formattedResult;
 
-        var formatForConsole = WebInspector.console._format.bind(WebInspector.console);
+        var formatForConsole = WebInspector.console._format.bind(WebInspector.console, plainText);
 
         if (Object.type(parameters[0], InspectorController.inspectedWindow()) === "string") {
             var formatters = {}
@@ -470,23 +485,24 @@ WebInspector.ConsoleMessage.prototype = {
             {
                 if (!(b instanceof Node))
                     b = document.createTextNode(b);
-
                 a.appendChild(b);
                 return a;
             }
 
-            var result = String.format(parameters[0], parameters.slice(1), formatters, this.formattedMessage, append);
-            this.formattedMessage = result.formattedResult;
+            var result = String.format(parameters[0], parameters.slice(1), formatters, formattedResult, append);
+            formattedResult = result.formattedResult;
             parameters = result.unusedSubstitutions;
             if (parameters.length)
-                this.formattedMessage.appendChild(document.createTextNode(" "));
+                formattedResult.appendChild(document.createTextNode(" "));
         }
 
         for (var i = 0; i < parameters.length; ++i) {
-            this.formattedMessage.appendChild(formatForConsole(parameters[i]));
+            formattedResult.appendChild(formatForConsole(parameters[i]));
             if (i < parameters.length - 1)
-                this.formattedMessage.appendChild(document.createTextNode(" "));
+                formattedResult.appendChild(document.createTextNode(" "));
         }
+
+        return formattedResult;
     },
 
     get shortURL()