Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. | 3 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. |
| 4 * Copyright (C) 2009 Joseph Pecoraro | 4 * Copyright (C) 2009 Joseph Pecoraro |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * | 9 * |
| 10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 39 { | 39 { |
| 40 this._message = consoleMessage; | 40 this._message = consoleMessage; |
| 41 this._linkifier = linkifier; | 41 this._linkifier = linkifier; |
| 42 this._repeatCount = 1; | 42 this._repeatCount = 1; |
| 43 this._closeGroupDecorationCount = 0; | 43 this._closeGroupDecorationCount = 0; |
| 44 this._nestingLevel = nestingLevel; | 44 this._nestingLevel = nestingLevel; |
| 45 | 45 |
| 46 /** @type {?WebInspector.DataGrid} */ | 46 /** @type {?WebInspector.DataGrid} */ |
| 47 this._dataGrid = null; | 47 this._dataGrid = null; |
| 48 | 48 |
| 49 /** @type {!Object.<string, function(!WebInspector.RemoteObject, !Element, b oolean=)>} */ | 49 /** @type {!Object.<string, function(!WebInspector.ConsoleViewMessage.Format terOptions)>} */ |
| 50 this._customFormatters = { | 50 this._customFormatters = { |
| 51 "array": this._formatParameterAsArray, | 51 "array": this._formatParameterAsArray, |
| 52 "typedarray": this._formatParameterAsArray, | 52 "typedarray": this._formatParameterAsArray, |
| 53 "error": this._formatParameterAsError, | 53 "error": this._formatParameterAsError, |
| 54 "function": this._formatParameterAsFunction, | 54 "function": this._formatParameterAsFunction, |
| 55 "generator": this._formatParameterAsObject, | 55 "generator": this._formatParameterAsObject, |
| 56 "iterator": this._formatParameterAsObject, | 56 "iterator": this._formatParameterAsObject, |
| 57 "map": this._formatParameterAsObject, | 57 "map": this._formatParameterAsObject, |
| 58 "node": this._formatParameterAsNode, | 58 "node": this._formatParameterAsNode, |
| 59 "object": this._formatParameterAsObject, | 59 "object": this._formatParameterAsObject, |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 141 * @param {!WebInspector.ConsoleMessage} consoleMessage | 141 * @param {!WebInspector.ConsoleMessage} consoleMessage |
| 142 * @return {!Element} | 142 * @return {!Element} |
| 143 */ | 143 */ |
| 144 _formatMessageAsTable: function(consoleMessage) | 144 _formatMessageAsTable: function(consoleMessage) |
| 145 { | 145 { |
| 146 var formattedResult = createElement("span"); | 146 var formattedResult = createElement("span"); |
| 147 var table = consoleMessage.parameters && consoleMessage.parameters.lengt h ? consoleMessage.parameters[0] : null; | 147 var table = consoleMessage.parameters && consoleMessage.parameters.lengt h ? consoleMessage.parameters[0] : null; |
| 148 if (table) | 148 if (table) |
| 149 table = this._parameterToRemoteObject(table, this._target()); | 149 table = this._parameterToRemoteObject(table, this._target()); |
| 150 if (!table || !table.preview) | 150 if (!table || !table.preview) |
| 151 return this._buildMessageAnchor(formattedResult, consoleMessage); | 151 return this._buildMessageAnchor(formattedResult, consoleMessage, thi s._linkifier); |
| 152 | 152 |
| 153 var columnNames = []; | 153 var columnNames = []; |
| 154 var preview = table.preview; | 154 var preview = table.preview; |
| 155 var rows = []; | 155 var rows = []; |
| 156 for (var i = 0; i < preview.properties.length; ++i) { | 156 for (var i = 0; i < preview.properties.length; ++i) { |
| 157 var rowProperty = preview.properties[i]; | 157 var rowProperty = preview.properties[i]; |
| 158 var rowPreview = rowProperty.valuePreview; | 158 var rowPreview = rowProperty.valuePreview; |
| 159 if (!rowPreview) | 159 if (!rowPreview) |
| 160 continue; | 160 continue; |
| 161 | 161 |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 188 for (var j = 0; j < columnNames.length; ++j) | 188 for (var j = 0; j < columnNames.length; ++j) |
| 189 flatValues.push(rowValue[columnNames[j]]); | 189 flatValues.push(rowValue[columnNames[j]]); |
| 190 } | 190 } |
| 191 columnNames.unshift(WebInspector.UIString("(index)")); | 191 columnNames.unshift(WebInspector.UIString("(index)")); |
| 192 | 192 |
| 193 if (flatValues.length) { | 193 if (flatValues.length) { |
| 194 this._dataGrid = WebInspector.SortableDataGrid.create(columnNames, f latValues); | 194 this._dataGrid = WebInspector.SortableDataGrid.create(columnNames, f latValues); |
| 195 | 195 |
| 196 var tableElement = formattedResult.createChild("div", "console-messa ge-formatted-table"); | 196 var tableElement = formattedResult.createChild("div", "console-messa ge-formatted-table"); |
| 197 var dataGridContainer = tableElement.createChild("span"); | 197 var dataGridContainer = tableElement.createChild("span"); |
| 198 tableElement.appendChild(this._formatParameter(table, true, false)); | 198 tableElement.appendChild(this._formatParameter(consoleMessage, this. _linkifier, table, true, false)); |
| 199 this._dataGrid.renderInline(); | 199 this._dataGrid.renderInline(); |
| 200 dataGridContainer.appendChild(this._dataGrid.element); | 200 dataGridContainer.appendChild(this._dataGrid.element); |
| 201 return this._buildMessageAnchor(formattedResult, consoleMessage); | 201 return this._buildMessageAnchor(formattedResult, consoleMessage, thi s._linkifier); |
| 202 } | 202 } |
| 203 return this._buildMessageAnchor(formattedResult, consoleMessage); | 203 return this._buildMessageAnchor(formattedResult, consoleMessage, this._l inkifier); |
| 204 }, | 204 }, |
| 205 | 205 |
| 206 /** | 206 /** |
| 207 * @param {!WebInspector.ConsoleMessage} consoleMessage | 207 * @param {!WebInspector.ConsoleMessage} consoleMessage |
| 208 * @param {!WebInspector.Linkifier} linkifier | |
| 208 * @return {!Element} | 209 * @return {!Element} |
| 209 */ | 210 */ |
| 210 _buildMessage: function(consoleMessage) | 211 _buildMessage: function(consoleMessage, linkifier) |
| 211 { | 212 { |
| 212 var messageElement; | 213 var messageElement; |
| 213 if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource. ConsoleAPI) { | 214 if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource. ConsoleAPI) { |
| 214 switch (consoleMessage.type) { | 215 switch (consoleMessage.type) { |
| 215 case WebInspector.ConsoleMessage.MessageType.Trace: | 216 case WebInspector.ConsoleMessage.MessageType.Trace: |
| 216 messageElement = this._format(consoleMessage.parameters || ["con sole.trace"]); | 217 messageElement = this._format(consoleMessage, linkifier, console Message.parameters || ["console.trace"]); |
| 217 break; | 218 break; |
| 218 case WebInspector.ConsoleMessage.MessageType.Clear: | 219 case WebInspector.ConsoleMessage.MessageType.Clear: |
| 219 messageElement = createElementWithClass("span", "console-info"); | 220 messageElement = createElementWithClass("span", "console-info"); |
| 220 messageElement.textContent = WebInspector.UIString("Console was cleared"); | 221 messageElement.textContent = WebInspector.UIString("Console was cleared"); |
| 221 break; | 222 break; |
| 222 case WebInspector.ConsoleMessage.MessageType.Assert: | 223 case WebInspector.ConsoleMessage.MessageType.Assert: |
| 223 var args = [WebInspector.UIString("Assertion failed:")]; | 224 var args = [WebInspector.UIString("Assertion failed:")]; |
| 224 if (consoleMessage.parameters) | 225 if (consoleMessage.parameters) |
| 225 args = args.concat(consoleMessage.parameters); | 226 args = args.concat(consoleMessage.parameters); |
| 226 messageElement = this._format(args); | 227 messageElement = this._format(consoleMessage, linkifier, args); |
| 227 break; | 228 break; |
| 228 case WebInspector.ConsoleMessage.MessageType.Dir: | 229 case WebInspector.ConsoleMessage.MessageType.Dir: |
| 229 var obj = consoleMessage.parameters ? consoleMessage.parameters[ 0] : undefined; | 230 var obj = consoleMessage.parameters ? consoleMessage.parameters[ 0] : undefined; |
| 230 var args = ["%O", obj]; | 231 var args = ["%O", obj]; |
| 231 messageElement = this._format(args); | 232 messageElement = this._format(consoleMessage, linkifier, args); |
| 232 break; | 233 break; |
| 233 case WebInspector.ConsoleMessage.MessageType.Profile: | 234 case WebInspector.ConsoleMessage.MessageType.Profile: |
| 234 case WebInspector.ConsoleMessage.MessageType.ProfileEnd: | 235 case WebInspector.ConsoleMessage.MessageType.ProfileEnd: |
| 235 messageElement = this._format([consoleMessage.messageText]); | 236 messageElement = this._format(consoleMessage, linkifier, [consol eMessage.messageText]); |
| 236 break; | 237 break; |
| 237 default: | 238 default: |
| 238 if (consoleMessage.parameters && consoleMessage.parameters.lengt h === 1 && consoleMessage.parameters[0].type === "string") | 239 if (consoleMessage.parameters && consoleMessage.parameters.lengt h === 1 && consoleMessage.parameters[0].type === "string") |
| 239 messageElement = this._tryFormatAsError(/** @type {string} * /(consoleMessage.parameters[0].value)); | 240 messageElement = this._tryFormatAsError(consoleMessage.targe t(), linkifier, /** @type {string} */(consoleMessage.parameters[0].value)); |
| 240 var args = consoleMessage.parameters || [consoleMessage.messageT ext]; | 241 var args = consoleMessage.parameters || [consoleMessage.messageT ext]; |
| 241 messageElement = messageElement || this._format(args); | 242 messageElement = messageElement || this._format(consoleMessage, linkifier, args); |
| 242 } | 243 } |
| 243 } else if (consoleMessage.source === WebInspector.ConsoleMessage.Message Source.Network) { | 244 } else if (consoleMessage.source === WebInspector.ConsoleMessage.Message Source.Network) { |
| 244 if (consoleMessage.request) { | 245 if (consoleMessage.request) { |
| 245 messageElement = createElement("span"); | 246 messageElement = createElement("span"); |
| 246 if (consoleMessage.level === WebInspector.ConsoleMessage.Message Level.Error || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel .RevokedError) { | 247 if (consoleMessage.level === WebInspector.ConsoleMessage.Message Level.Error || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel .RevokedError) { |
| 247 messageElement.createTextChildren(consoleMessage.request.req uestMethod, " "); | 248 messageElement.createTextChildren(consoleMessage.request.req uestMethod, " "); |
| 248 messageElement.appendChild(WebInspector.Linkifier.linkifyUsi ngRevealer(consoleMessage.request, consoleMessage.request.url, consoleMessage.re quest.url)); | 249 messageElement.appendChild(WebInspector.Linkifier.linkifyUsi ngRevealer(consoleMessage.request, consoleMessage.request.url, consoleMessage.re quest.url)); |
| 249 if (consoleMessage.request.failed) | 250 if (consoleMessage.request.failed) |
| 250 messageElement.createTextChildren(" ", consoleMessage.re quest.localizedFailDescription); | 251 messageElement.createTextChildren(" ", consoleMessage.re quest.localizedFailDescription); |
| 251 else | 252 else |
| 252 messageElement.createTextChildren(" ", String(consoleMes sage.request.statusCode), " (", consoleMessage.request.statusText, ")"); | 253 messageElement.createTextChildren(" ", String(consoleMes sage.request.statusCode), " (", consoleMessage.request.statusText, ")"); |
| 253 } else { | 254 } else { |
| 254 var fragment = WebInspector.linkifyStringAsFragmentWithCusto mLinkifier(consoleMessage.messageText, linkifyRequest.bind(consoleMessage)); | 255 var fragment = WebInspector.linkifyStringAsFragmentWithCusto mLinkifier(consoleMessage.messageText, linkifyRequest.bind(consoleMessage)); |
| 255 messageElement.appendChild(fragment); | 256 messageElement.appendChild(fragment); |
| 256 } | 257 } |
| 257 } else { | 258 } else { |
| 258 messageElement = this._format([consoleMessage.messageText]); | 259 messageElement = this._format(consoleMessage, linkifier, [consol eMessage.messageText]); |
| 259 } | 260 } |
| 260 } else { | 261 } else { |
| 261 var args = consoleMessage.parameters || [consoleMessage.messageText] ; | 262 var args = consoleMessage.parameters || [consoleMessage.messageText] ; |
| 262 messageElement = this._format(args); | 263 messageElement = this._format(consoleMessage, linkifier, args); |
| 263 } | 264 } |
| 264 | 265 |
| 265 var formattedMessage = this._buildMessageAnchor(messageElement, consoleM essage); | 266 var formattedMessage = this._buildMessageAnchor(messageElement, consoleM essage, linkifier); |
| 266 if (!!consoleMessage.stackTrace && (consoleMessage.source === WebInspect or.ConsoleMessage.MessageSource.Network || consoleMessage.level === WebInspector .ConsoleMessage.MessageLevel.Error || consoleMessage.level === WebInspector.Cons oleMessage.MessageLevel.RevokedError || consoleMessage.type === WebInspector.Con soleMessage.MessageType.Trace || consoleMessage.level === WebInspector.ConsoleMe ssage.MessageLevel.Warning)) | 267 if (!!consoleMessage.stackTrace && (consoleMessage.source === WebInspect or.ConsoleMessage.MessageSource.Network || consoleMessage.level === WebInspector .ConsoleMessage.MessageLevel.Error || consoleMessage.level === WebInspector.Cons oleMessage.MessageLevel.RevokedError || consoleMessage.type === WebInspector.Con soleMessage.MessageType.Trace || consoleMessage.level === WebInspector.ConsoleMe ssage.MessageLevel.Warning)) |
| 267 formattedMessage = this._buildMessageStackTrace(formattedMessage, co nsoleMessage, this._linkifier); | 268 formattedMessage = this._buildMessageStackTrace(formattedMessage, co nsoleMessage, linkifier); |
| 268 return formattedMessage; | 269 return formattedMessage; |
| 269 | 270 |
| 270 /** | 271 /** |
| 271 * @param {string} title | 272 * @param {string} title |
| 272 * @return {!Element} | 273 * @return {!Element} |
| 273 * @this {WebInspector.ConsoleMessage} | 274 * @this {WebInspector.ConsoleMessage} |
| 274 */ | 275 */ |
| 275 function linkifyRequest(title) | 276 function linkifyRequest(title) |
| 276 { | 277 { |
| 277 return WebInspector.Linkifier.linkifyUsingRevealer(/** @type {!WebIn spector.NetworkRequest} */ (this.request), title, this.request.url); | 278 return WebInspector.Linkifier.linkifyUsingRevealer(/** @type {!WebIn spector.NetworkRequest} */ (this.request), title, this.request.url); |
| 278 } | 279 } |
| 279 }, | 280 }, |
| 280 | 281 |
| 281 /** | 282 /** |
| 282 * @param {!Element} contents | 283 * @param {!Element} contents |
| 283 * @param {!WebInspector.ConsoleMessage} consoleMessage | 284 * @param {!WebInspector.ConsoleMessage} consoleMessage |
| 285 * @param {!WebInspector.Linkifier} linkifier | |
| 284 * @return {!Element} | 286 * @return {!Element} |
| 285 */ | 287 */ |
| 286 _buildMessageAnchor: function(contents, consoleMessage) | 288 _buildMessageAnchor: function(contents, consoleMessage, linkifier) |
| 287 { | 289 { |
| 288 var anchorElement = null; | 290 var anchorElement = null; |
| 289 if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource. Network || consoleMessage.request) { | 291 if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource. Network || consoleMessage.request) { |
| 290 if (consoleMessage.scriptId) { | 292 if (consoleMessage.scriptId) |
| 291 anchorElement = this._linkifyScriptId(consoleMessage.scriptId, c onsoleMessage.url || "", consoleMessage.line, consoleMessage.column); | 293 anchorElement = this._linkifyScriptId(linkifier, consoleMessage) ; |
| 292 } else { | 294 else if (consoleMessage.stackTrace && consoleMessage.stackTrace.call Frames.length) |
| 293 if (consoleMessage.stackTrace && consoleMessage.stackTrace.callF rames.length) | 295 anchorElement = this._linkifyStackTraceTopFrame(linkifier, conso leMessage); |
| 294 anchorElement = this._linkifyStackTraceTopFrame(consoleMessa ge.stackTrace); | 296 else if (consoleMessage.url && consoleMessage.url !== "undefined") |
| 295 else if (consoleMessage.url && consoleMessage.url !== "undefined ") | 297 anchorElement = this._linkifyLocation(linkifier, consoleMessage) ; |
| 296 anchorElement = this._linkifyLocation(consoleMessage.url, co nsoleMessage.line, consoleMessage.column); | |
| 297 } | |
| 298 } else if (consoleMessage.url) { | 298 } else if (consoleMessage.url) { |
| 299 var url = consoleMessage.url; | 299 var url = consoleMessage.url; |
| 300 var isExternal = !WebInspector.resourceForURL(url) && !WebInspector. networkMapping.uiSourceCodeForURLForAnyTarget(url); | 300 var isExternal = !WebInspector.resourceForURL(url) && !WebInspector. networkMapping.uiSourceCodeForURLForAnyTarget(url); |
| 301 anchorElement = WebInspector.linkifyURLAsNode(url, url, "console-mes sage-url", isExternal); | 301 anchorElement = WebInspector.linkifyURLAsNode(url, url, "console-mes sage-url", isExternal); |
| 302 } | 302 } |
| 303 | 303 |
| 304 var formattedMessage = createElement("span"); | 304 var formattedMessage = createElement("span"); |
| 305 WebInspector.appendStyle(formattedMessage, "components/objectValue.css") ; | 305 WebInspector.appendStyle(formattedMessage, "components/objectValue.css") ; |
| 306 formattedMessage.className = "console-message-text source-code"; | 306 formattedMessage.className = "console-message-text source-code"; |
| 307 | 307 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 360 clickableElement.addEventListener("click", toggleStackTrace, false); | 360 clickableElement.addEventListener("click", toggleStackTrace, false); |
| 361 triangleElement.addEventListener("click", toggleStackTrace, false); | 361 triangleElement.addEventListener("click", toggleStackTrace, false); |
| 362 if (consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trac e) | 362 if (consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trac e) |
| 363 expandStackTrace(true); | 363 expandStackTrace(true); |
| 364 | 364 |
| 365 toggleElement._expandStackTraceForTest = expandStackTrace.bind(null, tru e); | 365 toggleElement._expandStackTraceForTest = expandStackTrace.bind(null, tru e); |
| 366 return toggleElement; | 366 return toggleElement; |
| 367 }, | 367 }, |
| 368 | 368 |
| 369 /** | 369 /** |
| 370 * @param {string} url | 370 * @param {!WebInspector.Linkifier} linkifier |
| 371 * @param {number} lineNumber | 371 * @param {!WebInspector.ConsoleMessage} consoleMessage |
| 372 * @param {number} columnNumber | |
| 373 * @return {?Element} | 372 * @return {?Element} |
| 374 */ | 373 */ |
| 375 _linkifyLocation: function(url, lineNumber, columnNumber) | 374 _linkifyLocation: function(linkifier, consoleMessage) |
| 376 { | 375 { |
| 377 var target = this._target(); | 376 var target = consoleMessage.target(); |
| 378 if (!target) | 377 if (!target) |
| 379 return null; | 378 return null; |
| 380 return this._linkifier.linkifyScriptLocation(target, null, url, lineNumb er, columnNumber, "console-message-url"); | 379 return linkifier.linkifyScriptLocation(target, null, consoleMessage.url || "", consoleMessage.line, consoleMessage.column, "console-message-url"); |
| 381 }, | 380 }, |
| 382 | 381 |
| 383 /** | 382 /** |
| 384 * @param {!RuntimeAgent.StackTrace} stackTrace | 383 * @param {!WebInspector.Linkifier} linkifier |
| 384 * @param {!WebInspector.ConsoleMessage} consoleMessage | |
| 385 * @return {?Element} | 385 * @return {?Element} |
| 386 */ | 386 */ |
| 387 _linkifyStackTraceTopFrame: function(stackTrace) | 387 _linkifyStackTraceTopFrame: function(linkifier, consoleMessage) |
| 388 { | 388 { |
| 389 var target = this._target(); | 389 var target = consoleMessage.target(); |
| 390 if (!target) | 390 if (!target) |
| 391 return null; | 391 return null; |
| 392 return this._linkifier.linkifyStackTraceTopFrame(target, stackTrace, "co nsole-message-url"); | 392 return linkifier.linkifyStackTraceTopFrame(target, /** @type {!RuntimeAg ent.StackTrace} **/ (consoleMessage.stackTrace), "console-message-url"); |
| 393 }, | 393 }, |
| 394 | 394 |
| 395 /** | 395 /** |
| 396 * @param {string} scriptId | 396 * @param {!WebInspector.Linkifier} linkifier |
| 397 * @param {string} url | 397 * @param {!WebInspector.ConsoleMessage} consoleMessage |
| 398 * @param {number} lineNumber | |
| 399 * @param {number} columnNumber | |
| 400 * @return {?Element} | 398 * @return {?Element} |
| 401 */ | 399 */ |
| 402 _linkifyScriptId: function(scriptId, url, lineNumber, columnNumber) | 400 _linkifyScriptId: function(linkifier, consoleMessage) |
| 403 { | 401 { |
| 404 var target = this._target(); | 402 var target = consoleMessage.target(); |
| 405 if (!target) | 403 if (!target) |
| 406 return null; | 404 return null; |
| 407 return this._linkifier.linkifyScriptLocation(target, scriptId, url, line Number, columnNumber, "console-message-url"); | 405 return linkifier.linkifyScriptLocation(target, consoleMessage.scriptId, consoleMessage.url || "", consoleMessage.line, consoleMessage.column, "console-m essage-url"); |
| 408 }, | 406 }, |
| 409 | 407 |
| 410 /** | 408 /** |
| 411 * @param {!WebInspector.RemoteObject|!Object|string} parameter | 409 * @param {!WebInspector.RemoteObject|!Object|string} parameter |
| 412 * @param {?WebInspector.Target} target | 410 * @param {?WebInspector.Target} target |
| 413 * @return {!WebInspector.RemoteObject} | 411 * @return {!WebInspector.RemoteObject} |
| 414 */ | 412 */ |
| 415 _parameterToRemoteObject: function(parameter, target) | 413 _parameterToRemoteObject: function(parameter, target) |
| 416 { | 414 { |
| 417 if (parameter instanceof WebInspector.RemoteObject) | 415 if (parameter instanceof WebInspector.RemoteObject) |
| 418 return parameter; | 416 return parameter; |
| 419 if (!target) | 417 if (!target) |
| 420 return WebInspector.RemoteObject.fromLocalObject(parameter); | 418 return WebInspector.RemoteObject.fromLocalObject(parameter); |
| 421 if (typeof parameter === "object") | 419 if (typeof parameter === "object") |
| 422 return target.runtimeModel.createRemoteObject(parameter); | 420 return target.runtimeModel.createRemoteObject(parameter); |
| 423 return target.runtimeModel.createRemoteObjectFromPrimitiveValue(paramete r); | 421 return target.runtimeModel.createRemoteObjectFromPrimitiveValue(paramete r); |
| 424 }, | 422 }, |
| 425 | 423 |
| 426 /** | 424 /** |
| 425 * @param {!WebInspector.ConsoleMessage} consoleMessage | |
| 426 * @param {!WebInspector.Linkifier} linkifier | |
| 427 * @param {!Array.<!WebInspector.RemoteObject|string>} parameters | 427 * @param {!Array.<!WebInspector.RemoteObject|string>} parameters |
| 428 * @return {!Element} | 428 * @return {!Element} |
| 429 */ | 429 */ |
| 430 _format: function(parameters) | 430 _format: function(consoleMessage, linkifier, parameters) |
| 431 { | 431 { |
| 432 // This node is used like a Builder. Values are continually appended ont o it. | 432 // This node is used like a Builder. Values are continually appended ont o it. |
| 433 var formattedResult = createElement("span"); | 433 var formattedResult = createElement("span"); |
| 434 if (!parameters.length) | 434 if (!parameters.length) |
| 435 return formattedResult; | 435 return formattedResult; |
| 436 | 436 |
| 437 // Formatting code below assumes that parameters are all wrappers wherea s frontend console | 437 // Formatting code below assumes that parameters are all wrappers wherea s frontend console |
| 438 // API allows passing arbitrary values as messages (strings, numbers, et c.). Wrap them here. | 438 // API allows passing arbitrary values as messages (strings, numbers, et c.). Wrap them here. |
| 439 // FIXME: Only pass runtime wrappers here. | 439 // FIXME: Only pass runtime wrappers here. |
| 440 for (var i = 0; i < parameters.length; ++i) | 440 for (var i = 0; i < parameters.length; ++i) |
| 441 parameters[i] = this._parameterToRemoteObject(parameters[i], this._t arget()); | 441 parameters[i] = this._parameterToRemoteObject(parameters[i], console Message.target()); |
| 442 | 442 |
| 443 // There can be string log and string eval result. We distinguish betwee n them based on message type. | 443 // There can be string log and string eval result. We distinguish betwee n them based on message type. |
| 444 var shouldFormatMessage = WebInspector.RemoteObject.type((/** @type {!Ar ray.<!WebInspector.RemoteObject>} **/ (parameters))[0]) === "string" && (this._m essage.type !== WebInspector.ConsoleMessage.MessageType.Result || this._message. level === WebInspector.ConsoleMessage.MessageLevel.Error || this._message.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError); | 444 var messageType = consoleMessage.type; |
| 445 var shouldFormatMessage = WebInspector.RemoteObject.type((/** @type {!Ar ray.<!WebInspector.RemoteObject>} **/ (parameters))[0]) === "string" && (message Type !== WebInspector.ConsoleMessage.MessageType.Result || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Error || consoleMessage.level === W ebInspector.ConsoleMessage.MessageLevel.RevokedError); | |
| 445 | 446 |
| 446 // Multiple parameters with the first being a format string. Save unused substitutions. | 447 // Multiple parameters with the first being a format string. Save unused substitutions. |
| 447 if (shouldFormatMessage) { | 448 if (shouldFormatMessage) { |
| 448 var result = this._formatWithSubstitutionString(/** @type {string} * */ (parameters[0].description), parameters.slice(1), formattedResult); | 449 var result = this._formatWithSubstitutionString(consoleMessage, link ifier, /** @type {string} **/ (parameters[0].description), parameters.slice(1), formattedResult); |
| 449 parameters = result.unusedSubstitutions; | 450 parameters = result.unusedSubstitutions; |
| 450 if (parameters.length) | 451 if (parameters.length) |
| 451 formattedResult.createTextChild(" "); | 452 formattedResult.createTextChild(" "); |
| 452 } | 453 } |
| 453 | 454 |
| 454 // Single parameter, or unused substitutions from above. | 455 // Single parameter, or unused substitutions from above. |
| 455 for (var i = 0; i < parameters.length; ++i) { | 456 for (var i = 0; i < parameters.length; ++i) { |
| 456 // Inline strings when formatting. | 457 // Inline strings when formatting. |
| 457 if (shouldFormatMessage && parameters[i].type === "string") | 458 if (shouldFormatMessage && parameters[i].type === "string") |
| 458 formattedResult.appendChild(WebInspector.linkifyStringAsFragment (parameters[i].description)); | 459 formattedResult.appendChild(WebInspector.linkifyStringAsFragment (parameters[i].description)); |
| 459 else | 460 else |
| 460 formattedResult.appendChild(this._formatParameter(parameters[i], false, true)); | 461 formattedResult.appendChild(this._formatParameter(consoleMessage , linkifier, parameters[i], false, true)); |
| 461 if (i < parameters.length - 1) | 462 if (i < parameters.length - 1) |
| 462 formattedResult.createTextChild(" "); | 463 formattedResult.createTextChild(" "); |
| 463 } | 464 } |
| 464 return formattedResult; | 465 return formattedResult; |
| 465 }, | 466 }, |
| 466 | 467 |
| 467 /** | 468 /** |
| 469 * @param {!WebInspector.ConsoleMessage} consoleMessage | |
| 470 * @param {!WebInspector.Linkifier} linkifier | |
| 468 * @param {!WebInspector.RemoteObject} output | 471 * @param {!WebInspector.RemoteObject} output |
| 469 * @param {boolean=} forceObjectFormat | 472 * @param {boolean=} forceObjectFormat |
| 470 * @param {boolean=} includePreview | 473 * @param {boolean=} includePreview |
| 471 * @return {!Element} | 474 * @return {!Element} |
| 472 */ | 475 */ |
| 473 _formatParameter: function(output, forceObjectFormat, includePreview) | 476 _formatParameter: function(consoleMessage, linkifier, output, forceObjectFor mat, includePreview) |
| 474 { | 477 { |
| 475 if (output.customPreview()) { | 478 if (output.customPreview()) |
| 476 return (new WebInspector.CustomPreviewComponent(output)).element; | 479 return (new WebInspector.CustomPreviewComponent(output)).element; |
| 477 } | |
| 478 | 480 |
| 479 var type = forceObjectFormat ? "object" : (output.subtype || output.type ); | 481 var type = forceObjectFormat ? "object" : (output.subtype || output.type ); |
| 480 var formatter = this._customFormatters[type] || this._formatParameterAsV alue; | 482 var formatter = this._customFormatters[type] || this._formatParameterAsV alue; |
| 481 var span = createElement("span"); | 483 var span = createElement("span"); |
| 482 span.className = "object-value-" + type + " source-code"; | 484 span.className = "object-value-" + type + " source-code"; |
| 483 formatter.call(this, output, span, includePreview); | 485 formatter.call(this, { |
| 486 object: output, | |
| 487 element: span, | |
| 488 includePreview: includePreview, | |
| 489 linkifier: linkifier, | |
| 490 consoleMessage: consoleMessage | |
| 491 }); | |
| 484 return span; | 492 return span; |
| 485 }, | 493 }, |
| 486 | 494 |
| 487 /** | 495 /** |
| 488 * @param {!WebInspector.RemoteObject} obj | 496 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options |
| 489 * @param {!Element} elem | |
| 490 */ | 497 */ |
| 491 _formatParameterAsValue: function(obj, elem) | 498 _formatParameterAsValue: function(options) |
| 492 { | 499 { |
| 500 var elem = options.element; | |
| 501 var obj = options.object; | |
| 493 elem.createTextChild(obj.description || ""); | 502 elem.createTextChild(obj.description || ""); |
| 494 if (obj.objectId) | 503 if (obj.objectId) |
| 495 elem.addEventListener("contextmenu", this._contextMenuEventFired.bin d(this, obj), false); | 504 elem.addEventListener("contextmenu", this._contextMenuEventFired.bin d(this, obj), false); |
| 496 }, | 505 }, |
| 497 | 506 |
| 498 /** | 507 /** |
| 499 * @param {!WebInspector.RemoteObject} obj | 508 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options |
| 500 * @param {!Element} elem | |
| 501 * @param {boolean=} includePreview | |
| 502 */ | 509 */ |
| 503 _formatParameterAsObject: function(obj, elem, includePreview) | 510 _formatParameterAsObject: function(options) |
| 504 { | 511 { |
| 505 this._formatParameterAsArrayOrObject(obj, elem, includePreview); | 512 var obj = options.object; |
| 506 }, | 513 var elem = options.element; |
| 507 | |
| 508 /** | |
| 509 * @param {!WebInspector.RemoteObject} obj | |
| 510 * @param {!Element} elem | |
| 511 * @param {boolean=} includePreview | |
| 512 */ | |
| 513 _formatParameterAsArrayOrObject: function(obj, elem, includePreview) | |
| 514 { | |
| 515 var titleElement = createElement("span"); | 514 var titleElement = createElement("span"); |
| 516 if (includePreview && obj.preview) { | 515 if (options.includePreview && obj.preview) { |
| 517 titleElement.classList.add("console-object-preview"); | 516 titleElement.classList.add("console-object-preview"); |
| 518 this._previewFormatter.appendObjectPreview(titleElement, obj.preview ); | 517 this._previewFormatter.appendObjectPreview(titleElement, obj.preview ); |
| 519 } else { | 518 } else { |
| 520 if (obj.type === "function") { | 519 if (obj.type === "function") { |
| 521 WebInspector.ObjectPropertiesSection.formatObjectAsFunction(obj, titleElement, false); | 520 WebInspector.ObjectPropertiesSection.formatObjectAsFunction(obj, titleElement, false); |
| 522 titleElement.classList.add("object-value-function"); | 521 titleElement.classList.add("object-value-function"); |
| 523 } else { | 522 } else { |
| 524 titleElement.createTextChild(obj.description || ""); | 523 titleElement.createTextChild(obj.description || ""); |
| 525 } | 524 } |
| 526 } | 525 } |
| 527 | 526 |
| 528 var section = new WebInspector.ObjectPropertiesSection(obj, titleElement , this._linkifier); | 527 var section = new WebInspector.ObjectPropertiesSection(obj, titleElement , options.linkifier); |
| 529 section.element.classList.add("console-view-object-properties-section"); | 528 section.element.classList.add("console-view-object-properties-section"); |
| 530 section.enableContextMenu(); | 529 section.enableContextMenu(); |
| 531 elem.appendChild(section.element); | 530 elem.appendChild(section.element); |
| 532 }, | 531 }, |
| 533 | 532 |
| 534 /** | 533 /** |
| 535 * @param {!WebInspector.RemoteObject} func | 534 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options |
| 536 * @param {!Element} element | |
| 537 * @param {boolean=} includePreview | |
| 538 */ | 535 */ |
| 539 _formatParameterAsFunction: function(func, element, includePreview) | 536 _formatParameterAsFunction: function(options) |
| 540 { | 537 { |
| 538 var func = options.object; | |
| 539 var element = options.element; | |
| 540 var includePreview = options.includePreview; | |
| 541 WebInspector.RemoteFunction.objectAsFunction(func).targetFunction().then (formatTargetFunction.bind(this)); | 541 WebInspector.RemoteFunction.objectAsFunction(func).targetFunction().then (formatTargetFunction.bind(this)); |
| 542 | 542 |
| 543 /** | 543 /** |
| 544 * @param {!WebInspector.RemoteObject} targetFunction | 544 * @param {!WebInspector.RemoteObject} targetFunction |
| 545 * @this {WebInspector.ConsoleViewMessage} | 545 * @this {WebInspector.ConsoleViewMessage} |
| 546 */ | 546 */ |
| 547 function formatTargetFunction(targetFunction) | 547 function formatTargetFunction(targetFunction) |
| 548 { | 548 { |
| 549 var functionElement = createElement("span"); | 549 var functionElement = createElement("span"); |
| 550 WebInspector.ObjectPropertiesSection.formatObjectAsFunction(targetFu nction, functionElement, true, includePreview); | 550 WebInspector.ObjectPropertiesSection.formatObjectAsFunction(targetFu nction, functionElement, true, includePreview); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 575 */ | 575 */ |
| 576 _renderPropertyPreviewOrAccessor: function(object, propertyPath) | 576 _renderPropertyPreviewOrAccessor: function(object, propertyPath) |
| 577 { | 577 { |
| 578 var property = propertyPath.peekLast(); | 578 var property = propertyPath.peekLast(); |
| 579 if (property.type === "accessor") | 579 if (property.type === "accessor") |
| 580 return this._formatAsAccessorProperty(object, propertyPath.map(prope rty => property.name), false); | 580 return this._formatAsAccessorProperty(object, propertyPath.map(prope rty => property.name), false); |
| 581 return this._previewFormatter.renderPropertyPreview(property.type, /** @ type {string} */ (property.subtype), property.value); | 581 return this._previewFormatter.renderPropertyPreview(property.type, /** @ type {string} */ (property.subtype), property.value); |
| 582 }, | 582 }, |
| 583 | 583 |
| 584 /** | 584 /** |
| 585 * @param {!WebInspector.RemoteObject} object | 585 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options |
| 586 * @param {!Element} elem | |
| 587 */ | 586 */ |
| 588 _formatParameterAsNode: function(object, elem) | 587 _formatParameterAsNode: function(options) |
| 589 { | 588 { |
| 589 var object = options.object; | |
| 590 var elem = options.element; | |
| 591 var linkifier = options.linkifier; | |
| 590 WebInspector.Renderer.renderPromise(object).then(appendRenderer.bind(thi s), failedToRender.bind(this)); | 592 WebInspector.Renderer.renderPromise(object).then(appendRenderer.bind(thi s), failedToRender.bind(this)); |
| 591 /** | 593 /** |
| 592 * @param {!Element} rendererElement | 594 * @param {!Element} rendererElement |
| 593 * @this {WebInspector.ConsoleViewMessage} | 595 * @this {WebInspector.ConsoleViewMessage} |
| 594 */ | 596 */ |
| 595 function appendRenderer(rendererElement) | 597 function appendRenderer(rendererElement) |
| 596 { | 598 { |
| 597 elem.appendChild(rendererElement); | 599 elem.appendChild(rendererElement); |
| 598 this._formattedParameterAsNodeForTest(); | 600 this._formattedParameterAsNodeForTest(); |
| 599 } | 601 } |
| 600 | 602 |
| 601 /** | 603 /** |
| 602 * @this {WebInspector.ConsoleViewMessage} | 604 * @this {WebInspector.ConsoleViewMessage} |
| 603 */ | 605 */ |
| 604 function failedToRender() | 606 function failedToRender() |
| 605 { | 607 { |
| 606 this._formatParameterAsObject(object, elem, false); | 608 this._formatParameterAsObject({ |
| 609 object: object, | |
| 610 element: elem, | |
| 611 includePreview: false, | |
| 612 linkifier: linkifier | |
| 613 }); | |
| 607 } | 614 } |
| 608 }, | 615 }, |
| 609 | 616 |
| 610 _formattedParameterAsNodeForTest: function() | 617 _formattedParameterAsNodeForTest: function() |
| 611 { | 618 { |
| 612 }, | 619 }, |
| 613 | 620 |
| 614 /** | 621 /** |
| 615 * @return {boolean} | 622 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options |
| 616 */ | 623 */ |
| 617 _usePrintedArrayFormatter: function() | 624 _formatParameterAsArray: function(options) |
| 618 { | 625 { |
| 619 return this._message.type !== WebInspector.ConsoleMessage.MessageType.Di rXML && this._message.type !== WebInspector.ConsoleMessage.MessageType.Result; | 626 var array = options.object; |
| 627 var elem = options.element; | |
| 628 var linkifier = options.linkifier; | |
| 629 var messageType = options.consoleMessage.type; | |
| 630 var usePrintedArrayFormat = messageType !== WebInspector.ConsoleMessage. MessageType.DirXML && messageType !== WebInspector.ConsoleMessage.MessageType.Re sult; | |
| 631 var maxFlatArrayLength = 100; | |
| 632 if (usePrintedArrayFormat || array.arrayLength() > maxFlatArrayLength) | |
| 633 this._formatParameterAsObject({ | |
| 634 object: array, | |
| 635 element: elem, | |
| 636 includePreview: usePrintedArrayFormat || array.arrayLength() <= maxFlatArrayLength, | |
| 637 linkifier: linkifier | |
| 638 }); | |
| 639 else | |
| 640 array.getAllProperties(false, this._printArrayResult.bind(this, arra y, elem, linkifier)); | |
| 620 }, | 641 }, |
| 621 | 642 |
| 622 /** | 643 /** |
| 623 * @param {!WebInspector.RemoteObject} array | 644 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options |
| 624 * @param {!Element} elem | |
| 625 */ | 645 */ |
| 626 _formatParameterAsArray: function(array, elem) | 646 _formatParameterAsString: function(options) |
| 627 { | |
| 628 var maxFlatArrayLength = 100; | |
| 629 if (this._usePrintedArrayFormatter() || array.arrayLength() > maxFlatArr ayLength) | |
| 630 this._formatParameterAsArrayOrObject(array, elem, this._usePrintedAr rayFormatter() || array.arrayLength() <= maxFlatArrayLength); | |
| 631 else | |
| 632 array.getAllProperties(false, this._printArrayResult.bind(this, arra y, elem)); | |
| 633 }, | |
| 634 | |
| 635 /** | |
| 636 * @param {!WebInspector.RemoteObject} output | |
| 637 * @param {!Element} elem | |
| 638 */ | |
| 639 _formatParameterAsString: function(output, elem) | |
| 640 { | 647 { |
| 641 var span = createElement("span"); | 648 var span = createElement("span"); |
| 642 span.className = "object-value-string source-code"; | 649 span.className = "object-value-string source-code"; |
| 643 span.appendChild(WebInspector.linkifyStringAsFragment(output.description || "")); | 650 span.appendChild(WebInspector.linkifyStringAsFragment(options.object.des cription || "")); |
| 644 | 651 |
| 645 // Make black quotes. | 652 // Make black quotes. |
| 653 var elem = options.element; | |
| 646 elem.classList.remove("object-value-string"); | 654 elem.classList.remove("object-value-string"); |
| 647 elem.createTextChild("\""); | 655 elem.createTextChild("\""); |
| 648 elem.appendChild(span); | 656 elem.appendChild(span); |
| 649 elem.createTextChild("\""); | 657 elem.createTextChild("\""); |
| 650 }, | 658 }, |
| 651 | 659 |
| 652 /** | 660 /** |
| 653 * @param {!WebInspector.RemoteObject} output | 661 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options |
| 654 * @param {!Element} elem | |
| 655 */ | 662 */ |
| 656 _formatParameterAsError: function(output, elem) | 663 _formatParameterAsError: function(options) |
| 657 { | 664 { |
| 658 var span = elem.createChild("span", "object-value-error source-code"); | 665 var obj = options.object; |
| 659 var errorSpan = this._tryFormatAsError(output.description || ""); | 666 var span = options.element.createChild("span", "object-value-error sourc e-code"); |
| 660 span.appendChild(errorSpan ? errorSpan : WebInspector.linkifyStringAsFra gment(output.description || "")); | 667 var errorSpan = this._tryFormatAsError(options.consoleMessage.target(), options.linkifier, obj.description || ""); |
| 668 span.appendChild(errorSpan ? errorSpan : WebInspector.linkifyStringAsFra gment(obj.description || "")); | |
| 661 }, | 669 }, |
| 662 | 670 |
| 663 /** | 671 /** |
| 664 * @param {!WebInspector.RemoteObject} array | 672 * @param {!WebInspector.RemoteObject} array |
| 665 * @param {!Element} elem | 673 * @param {!Element} elem |
| 674 * @param {!WebInspector.Linkifier} linkifier | |
| 666 * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties | 675 * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties |
| 667 */ | 676 */ |
| 668 _printArrayResult: function(array, elem, properties) | 677 _printArrayResult: function(array, elem, linkifier, properties) |
| 669 { | 678 { |
| 670 if (!properties) { | 679 if (!properties) { |
| 671 this._formatParameterAsObject(array, elem, false); | 680 this._formatParameterAsObject({ |
| 681 object: array, | |
| 682 element: elem, | |
| 683 includePreview: false, | |
| 684 linkifier: linkifier | |
| 685 }); | |
| 672 return; | 686 return; |
| 673 } | 687 } |
| 674 | 688 |
| 675 var titleElement = createElement("span"); | 689 var titleElement = createElement("span"); |
| 676 var elements = {}; | 690 var elements = {}; |
| 677 for (var i = 0; i < properties.length; ++i) { | 691 for (var i = 0; i < properties.length; ++i) { |
| 678 var property = properties[i]; | 692 var property = properties[i]; |
| 679 var name = property.name; | 693 var name = property.name; |
| 680 if (isNaN(name)) | 694 if (isNaN(name)) |
| 681 continue; | 695 continue; |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 709 | 723 |
| 710 titleElement.appendChild(element); | 724 titleElement.appendChild(element); |
| 711 lastNonEmptyIndex = i; | 725 lastNonEmptyIndex = i; |
| 712 if (i < length - 1) | 726 if (i < length - 1) |
| 713 titleElement.createTextChild(", "); | 727 titleElement.createTextChild(", "); |
| 714 } | 728 } |
| 715 appendUndefined(titleElement, length); | 729 appendUndefined(titleElement, length); |
| 716 | 730 |
| 717 titleElement.createTextChild("]"); | 731 titleElement.createTextChild("]"); |
| 718 | 732 |
| 719 var section = new WebInspector.ObjectPropertiesSection(array, titleEleme nt, this._linkifier); | 733 var section = new WebInspector.ObjectPropertiesSection(array, titleEleme nt, linkifier); |
| 720 section.element.classList.add("console-view-object-properties-section"); | 734 section.element.classList.add("console-view-object-properties-section"); |
| 721 section.enableContextMenu(); | 735 section.enableContextMenu(); |
| 722 elem.appendChild(section.element); | 736 elem.appendChild(section.element); |
| 723 }, | 737 }, |
| 724 | 738 |
| 725 /** | 739 /** |
| 726 * @param {!WebInspector.RemoteObject} output | 740 * @param {!WebInspector.RemoteObject} output |
| 727 * @return {!Element} | 741 * @return {!Element} |
| 728 */ | 742 */ |
| 729 _formatAsArrayEntry: function(output) | 743 _formatAsArrayEntry: function(output) |
| 730 { | 744 { |
| 731 if (this._message.type === WebInspector.ConsoleMessage.MessageType.DirXM L) { | 745 // // TODO(luoe): This condition won't be here after rebase with master VV |
| 732 // Prevent infinite expansion of cross-referencing arrays. | 746 // if (this._message.type === WebInspector.ConsoleMessage.MessageType.Di rXML) { |
| 733 return this._formatParameter(output, output.subtype === "array" || o utput.subtype === "typedarray", false); | 747 // // Prevent infinite expansion of cross-referencing arrays. |
| 734 } | 748 // return this._formatParameter(output, output.subtype === "array" | | output.subtype === "typedarray", false); |
| 749 // } | |
| 735 return this._previewFormatter.renderPropertyPreview(output.type, output. subtype, output.description); | 750 return this._previewFormatter.renderPropertyPreview(output.type, output. subtype, output.description); |
| 736 }, | 751 }, |
| 737 | 752 |
| 738 /** | 753 /** |
| 739 * @param {?WebInspector.RemoteObject} object | 754 * @param {?WebInspector.RemoteObject} object |
| 740 * @param {!Array.<string>} propertyPath | 755 * @param {!Array.<string>} propertyPath |
| 741 * @param {boolean} isArrayEntry | 756 * @param {boolean} isArrayEntry |
| 742 * @return {!Element} | 757 * @return {!Element} |
| 743 */ | 758 */ |
| 744 _formatAsAccessorProperty: function(object, propertyPath, isArrayEntry) | 759 _formatAsAccessorProperty: function(object, propertyPath, isArrayEntry) |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 774 description = result.description.trimEnd(maxLength); | 789 description = result.description.trimEnd(maxLength); |
| 775 } | 790 } |
| 776 rootElement.appendChild(this._previewFormatter.renderPropertyPre view(type, subtype, description)); | 791 rootElement.appendChild(this._previewFormatter.renderPropertyPre view(type, subtype, description)); |
| 777 } | 792 } |
| 778 } | 793 } |
| 779 | 794 |
| 780 return rootElement; | 795 return rootElement; |
| 781 }, | 796 }, |
| 782 | 797 |
| 783 /** | 798 /** |
| 799 * @param {!WebInspector.ConsoleMessage} consoleMessage | |
| 800 * @param {!WebInspector.Linkifier} linkifier | |
| 784 * @param {string} format | 801 * @param {string} format |
| 785 * @param {!Array.<!WebInspector.RemoteObject>} parameters | 802 * @param {!Array.<!WebInspector.RemoteObject>} parameters |
| 786 * @param {!Element} formattedResult | 803 * @param {!Element} formattedResult |
| 787 */ | 804 */ |
| 788 _formatWithSubstitutionString: function(format, parameters, formattedResult) | 805 _formatWithSubstitutionString: function(consoleMessage, linkifier, format, p arameters, formattedResult) |
| 789 { | 806 { |
| 790 var formatters = {}; | 807 var formatters = {}; |
| 791 | 808 |
| 792 /** | 809 /** |
| 810 * @param {!WebInspector.RemoteObject} obj | |
| 793 * @param {boolean} force | 811 * @param {boolean} force |
| 794 * @param {!WebInspector.RemoteObject} obj | |
| 795 * @return {!Element} | 812 * @return {!Element} |
| 796 * @this {WebInspector.ConsoleViewMessage} | 813 * @this {WebInspector.ConsoleViewMessage} |
| 797 */ | 814 */ |
| 798 function parameterFormatter(force, obj) | 815 function parameterFormatter(force, obj) |
| 799 { | 816 { |
| 800 return this._formatParameter(obj, force, false); | 817 return this._formatParameter(consoleMessage, linkifier, obj, force, false); |
| 801 } | 818 } |
| 802 | 819 |
| 803 function stringFormatter(obj) | 820 function stringFormatter(obj) |
| 804 { | 821 { |
| 805 return obj.description; | 822 return obj.description; |
| 806 } | 823 } |
| 807 | 824 |
| 808 function floatFormatter(obj) | 825 function floatFormatter(obj) |
| 809 { | 826 { |
| 810 if (typeof obj.value !== "number") | 827 if (typeof obj.value !== "number") |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 968 | 985 |
| 969 var contentElement = createElementWithClass("div", "console-message"); | 986 var contentElement = createElementWithClass("div", "console-message"); |
| 970 this._contentElement = contentElement; | 987 this._contentElement = contentElement; |
| 971 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Start Group || this._message.type === WebInspector.ConsoleMessage.MessageType.StartGro upCollapsed) | 988 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Start Group || this._message.type === WebInspector.ConsoleMessage.MessageType.StartGro upCollapsed) |
| 972 contentElement.classList.add("console-group-title"); | 989 contentElement.classList.add("console-group-title"); |
| 973 | 990 |
| 974 var formattedMessage; | 991 var formattedMessage; |
| 975 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table ) | 992 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table ) |
| 976 formattedMessage = this._formatMessageAsTable(this._message); | 993 formattedMessage = this._formatMessageAsTable(this._message); |
| 977 else | 994 else |
| 978 formattedMessage = this._buildMessage(this._message); | 995 formattedMessage = this._buildMessage(this._message, this._linkifier ); |
| 979 contentElement.appendChild(formattedMessage); | 996 contentElement.appendChild(formattedMessage); |
| 980 | 997 |
| 981 this.updateTimestamp(WebInspector.moduleSetting("consoleTimestampsEnable d").get()); | 998 this.updateTimestamp(WebInspector.moduleSetting("consoleTimestampsEnable d").get()); |
| 982 return this._contentElement; | 999 return this._contentElement; |
| 983 }, | 1000 }, |
| 984 | 1001 |
| 985 /** | 1002 /** |
| 986 * @return {!Element} | 1003 * @return {!Element} |
| 987 */ | 1004 */ |
| 988 toMessageElement: function() | 1005 toMessageElement: function() |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1132 | 1149 |
| 1133 /** | 1150 /** |
| 1134 * @return {!Element} | 1151 * @return {!Element} |
| 1135 */ | 1152 */ |
| 1136 searchHighlightNode: function(index) | 1153 searchHighlightNode: function(index) |
| 1137 { | 1154 { |
| 1138 return this._searchHighlightNodes[index]; | 1155 return this._searchHighlightNodes[index]; |
| 1139 }, | 1156 }, |
| 1140 | 1157 |
| 1141 /** | 1158 /** |
| 1159 * @param {?WebInspector.Target} target | |
| 1160 * @param {!WebInspector.Linkifier} linkifier | |
| 1142 * @param {string} string | 1161 * @param {string} string |
| 1143 * @return {?Element} | 1162 * @return {?Element} |
| 1144 */ | 1163 */ |
| 1145 _tryFormatAsError: function(string) | 1164 _tryFormatAsError: function(target, linkifier, string) |
| 1146 { | 1165 { |
| 1147 /** | 1166 /** |
| 1148 * @param {string} prefix | 1167 * @param {string} prefix |
| 1149 */ | 1168 */ |
| 1150 function startsWith(prefix) | 1169 function startsWith(prefix) |
| 1151 { | 1170 { |
| 1152 return string.startsWith(prefix); | 1171 return string.startsWith(prefix); |
| 1153 } | 1172 } |
| 1154 | 1173 |
| 1155 var errorPrefixes = ["EvalError", "ReferenceError", "SyntaxError", "Type Error", "RangeError", "Error", "URIError"]; | 1174 var errorPrefixes = ["EvalError", "ReferenceError", "SyntaxError", "Type Error", "RangeError", "Error", "URIError"]; |
| 1156 var target = this._target(); | |
| 1157 if (!target || !errorPrefixes.some(startsWith)) | 1175 if (!target || !errorPrefixes.some(startsWith)) |
| 1158 return null; | 1176 return null; |
| 1159 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); | 1177 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
| 1160 if (!debuggerModel) | 1178 if (!debuggerModel) |
| 1161 return null; | 1179 return null; |
| 1162 | 1180 |
| 1163 var lines = string.split("\n"); | 1181 var lines = string.split("\n"); |
| 1164 var links = []; | 1182 var links = []; |
| 1165 var position = 0; | 1183 var position = 0; |
| 1166 for (var i = 0; i < lines.length; ++i) { | 1184 for (var i = 0; i < lines.length; ++i) { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1201 links.push({url: url, positionLeft: position + left, positionRight: position + right, lineNumber: splitResult.lineNumber, columnNumber: splitResult. columnNumber}); | 1219 links.push({url: url, positionLeft: position + left, positionRight: position + right, lineNumber: splitResult.lineNumber, columnNumber: splitResult. columnNumber}); |
| 1202 } | 1220 } |
| 1203 | 1221 |
| 1204 if (!links.length) | 1222 if (!links.length) |
| 1205 return null; | 1223 return null; |
| 1206 | 1224 |
| 1207 var formattedResult = createElement("span"); | 1225 var formattedResult = createElement("span"); |
| 1208 var start = 0; | 1226 var start = 0; |
| 1209 for (var i = 0; i < links.length; ++i) { | 1227 for (var i = 0; i < links.length; ++i) { |
| 1210 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(str ing.substring(start, links[i].positionLeft))); | 1228 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(str ing.substring(start, links[i].positionLeft))); |
| 1211 formattedResult.appendChild(this._linkifier.linkifyScriptLocation(ta rget, null, links[i].url, links[i].lineNumber, links[i].columnNumber)); | 1229 formattedResult.appendChild(linkifier.linkifyScriptLocation(target, null, links[i].url, links[i].lineNumber, links[i].columnNumber)); |
| 1212 start = links[i].positionRight; | 1230 start = links[i].positionRight; |
| 1213 } | 1231 } |
| 1214 | 1232 |
| 1215 if (start !== string.length) | 1233 if (start !== string.length) |
| 1216 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(str ing.substring(start))); | 1234 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(str ing.substring(start))); |
| 1217 | 1235 |
| 1218 return formattedResult; | 1236 return formattedResult; |
| 1219 } | 1237 } |
| 1220 } | 1238 } |
| 1221 | 1239 |
| 1222 /** | 1240 /** |
| 1241 * @typedef {{ | |
| 1242 * object: (!WebInspector.RemoteObject), | |
| 1243 * element: (!Element), | |
| 1244 * linkifier: (!WebInspector.Linkifier), | |
| 1245 * includePreview: (boolean|undefined), | |
| 1246 * consoleMessage: (!WebInspector.ConsoleMessage|undefined) | |
| 1247 * }} | |
| 1248 **/ | |
|
lushnikov
2016/09/30 21:56:46
let's not create an options object; instead, let's
luoe
2016/10/01 01:10:52
Done.
| |
| 1249 WebInspector.ConsoleViewMessage.FormatterOptions; | |
| 1250 | |
| 1251 /** | |
| 1223 * @constructor | 1252 * @constructor |
| 1224 * @extends {WebInspector.ConsoleViewMessage} | 1253 * @extends {WebInspector.ConsoleViewMessage} |
| 1225 * @param {!WebInspector.ConsoleMessage} consoleMessage | 1254 * @param {!WebInspector.ConsoleMessage} consoleMessage |
| 1226 * @param {!WebInspector.Linkifier} linkifier | 1255 * @param {!WebInspector.Linkifier} linkifier |
| 1227 * @param {number} nestingLevel | 1256 * @param {number} nestingLevel |
| 1228 */ | 1257 */ |
| 1229 WebInspector.ConsoleGroupViewMessage = function(consoleMessage, linkifier, nesti ngLevel) | 1258 WebInspector.ConsoleGroupViewMessage = function(consoleMessage, linkifier, nesti ngLevel) |
| 1230 { | 1259 { |
| 1231 console.assert(consoleMessage.isGroupStartMessage()); | 1260 console.assert(consoleMessage.isGroupStartMessage()); |
| 1232 WebInspector.ConsoleViewMessage.call(this, consoleMessage, linkifier, nestin gLevel); | 1261 WebInspector.ConsoleViewMessage.call(this, consoleMessage, linkifier, nestin gLevel); |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 1260 { | 1289 { |
| 1261 if (!this._element) { | 1290 if (!this._element) { |
| 1262 WebInspector.ConsoleViewMessage.prototype.toMessageElement.call(this ); | 1291 WebInspector.ConsoleViewMessage.prototype.toMessageElement.call(this ); |
| 1263 this._element.classList.toggle("collapsed", this._collapsed); | 1292 this._element.classList.toggle("collapsed", this._collapsed); |
| 1264 } | 1293 } |
| 1265 return this._element; | 1294 return this._element; |
| 1266 }, | 1295 }, |
| 1267 | 1296 |
| 1268 __proto__: WebInspector.ConsoleViewMessage.prototype | 1297 __proto__: WebInspector.ConsoleViewMessage.prototype |
| 1269 } | 1298 } |
| OLD | NEW |