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=)>} */ | |
| 50 this._customFormatters = { | |
| 51 "array": this._formatParameterAsArray, | |
| 52 "typedarray": this._formatParameterAsArray, | |
| 53 "error": this._formatParameterAsError, | |
| 54 "function": this._formatParameterAsFunction, | |
| 55 "generator": this._formatParameterAsObject, | |
| 56 "iterator": this._formatParameterAsObject, | |
| 57 "map": this._formatParameterAsObject, | |
| 58 "node": this._formatParameterAsNode, | |
| 59 "object": this._formatParameterAsObject, | |
| 60 "promise": this._formatParameterAsObject, | |
| 61 "proxy": this._formatParameterAsObject, | |
| 62 "set": this._formatParameterAsObject, | |
| 63 "string": this._formatParameterAsString | |
| 64 }; | |
| 65 this._previewFormatter = new WebInspector.RemoteObjectPreviewFormatter(); | 49 this._previewFormatter = new WebInspector.RemoteObjectPreviewFormatter(); |
| 66 this._searchRegex = null; | 50 this._searchRegex = null; |
| 67 } | 51 } |
| 68 | 52 |
| 69 WebInspector.ConsoleViewMessage.prototype = { | 53 WebInspector.ConsoleViewMessage.prototype = { |
| 70 /** | 54 /** |
| 71 * @return {?WebInspector.Target} | 55 * @return {?WebInspector.Target} |
| 72 */ | 56 */ |
| 73 _target: function() | 57 _target: function() |
| 74 { | 58 { |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 139 | 123 |
| 140 /** | 124 /** |
| 141 * @param {!WebInspector.ConsoleMessage} consoleMessage | 125 * @param {!WebInspector.ConsoleMessage} consoleMessage |
| 142 * @return {!Element} | 126 * @return {!Element} |
| 143 */ | 127 */ |
| 144 _buildTableMessage: function(consoleMessage) | 128 _buildTableMessage: function(consoleMessage) |
| 145 { | 129 { |
| 146 var formattedMessage = createElement("span"); | 130 var formattedMessage = createElement("span"); |
| 147 WebInspector.appendStyle(formattedMessage, "components/objectValue.css") ; | 131 WebInspector.appendStyle(formattedMessage, "components/objectValue.css") ; |
| 148 formattedMessage.className = "console-message-text source-code"; | 132 formattedMessage.className = "console-message-text source-code"; |
| 149 var anchorElement = this._buildMessageAnchor(consoleMessage); | 133 var anchorElement = this._buildMessageAnchor(consoleMessage, this._linki fier); |
| 150 if (anchorElement) | 134 if (anchorElement) |
| 151 formattedMessage.appendChild(anchorElement); | 135 formattedMessage.appendChild(anchorElement); |
| 152 | 136 |
| 153 var table = consoleMessage.parameters && consoleMessage.parameters.lengt h ? consoleMessage.parameters[0] : null; | 137 var table = consoleMessage.parameters && consoleMessage.parameters.lengt h ? consoleMessage.parameters[0] : null; |
| 154 if (table) | 138 if (table) |
| 155 table = this._parameterToRemoteObject(table, this._target()); | 139 table = this._parameterToRemoteObject(table, this._target()); |
| 156 if (!table || !table.preview) | 140 if (!table || !table.preview) |
| 157 return formattedMessage; | 141 return formattedMessage; |
| 158 | 142 |
| 159 var columnNames = []; | 143 var columnNames = []; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 194 for (var j = 0; j < columnNames.length; ++j) | 178 for (var j = 0; j < columnNames.length; ++j) |
| 195 flatValues.push(rowValue[columnNames[j]]); | 179 flatValues.push(rowValue[columnNames[j]]); |
| 196 } | 180 } |
| 197 columnNames.unshift(WebInspector.UIString("(index)")); | 181 columnNames.unshift(WebInspector.UIString("(index)")); |
| 198 | 182 |
| 199 if (flatValues.length) { | 183 if (flatValues.length) { |
| 200 this._dataGrid = WebInspector.SortableDataGrid.create(columnNames, f latValues); | 184 this._dataGrid = WebInspector.SortableDataGrid.create(columnNames, f latValues); |
| 201 | 185 |
| 202 var tableElement = formattedMessage.createChild("div", "console-mess age-formatted-table"); | 186 var tableElement = formattedMessage.createChild("div", "console-mess age-formatted-table"); |
| 203 var dataGridContainer = tableElement.createChild("span"); | 187 var dataGridContainer = tableElement.createChild("span"); |
| 204 tableElement.appendChild(this._formatParameter(table, true, false)); | 188 tableElement.appendChild(this._formatParameter(consoleMessage, this. _linkifier, table, true, false)); |
| 205 dataGridContainer.appendChild(this._dataGrid.element); | 189 dataGridContainer.appendChild(this._dataGrid.element); |
| 206 this._dataGrid.renderInline(); | 190 this._dataGrid.renderInline(); |
| 207 } | 191 } |
| 208 return formattedMessage; | 192 return formattedMessage; |
| 209 }, | 193 }, |
| 210 | 194 |
| 211 /** | 195 /** |
| 212 * @param {!WebInspector.ConsoleMessage} consoleMessage | 196 * @param {!WebInspector.ConsoleMessage} consoleMessage |
| 197 * @param {!WebInspector.Linkifier} linkifier | |
| 213 * @return {!Element} | 198 * @return {!Element} |
| 214 */ | 199 */ |
| 215 _buildMessage: function(consoleMessage) | 200 _buildMessage: function(consoleMessage, linkifier) |
| 216 { | 201 { |
| 217 var messageElement; | 202 var messageElement; |
| 218 if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource. ConsoleAPI) { | 203 if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource. ConsoleAPI) { |
| 219 switch (consoleMessage.type) { | 204 switch (consoleMessage.type) { |
| 220 case WebInspector.ConsoleMessage.MessageType.Trace: | 205 case WebInspector.ConsoleMessage.MessageType.Trace: |
| 221 messageElement = this._format(consoleMessage.parameters || ["con sole.trace"]); | 206 messageElement = this._format(consoleMessage, linkifier, console Message.parameters || ["console.trace"]); |
| 222 break; | 207 break; |
| 223 case WebInspector.ConsoleMessage.MessageType.Clear: | 208 case WebInspector.ConsoleMessage.MessageType.Clear: |
| 224 messageElement = createElementWithClass("span", "console-info"); | 209 messageElement = createElementWithClass("span", "console-info"); |
| 225 messageElement.textContent = WebInspector.UIString("Console was cleared"); | 210 messageElement.textContent = WebInspector.UIString("Console was cleared"); |
| 226 break; | 211 break; |
| 227 case WebInspector.ConsoleMessage.MessageType.Assert: | 212 case WebInspector.ConsoleMessage.MessageType.Assert: |
| 228 var args = [WebInspector.UIString("Assertion failed:")]; | 213 var args = [WebInspector.UIString("Assertion failed:")]; |
| 229 if (consoleMessage.parameters) | 214 if (consoleMessage.parameters) |
| 230 args = args.concat(consoleMessage.parameters); | 215 args = args.concat(consoleMessage.parameters); |
| 231 messageElement = this._format(args); | 216 messageElement = this._format(consoleMessage, linkifier, args); |
| 232 break; | 217 break; |
| 233 case WebInspector.ConsoleMessage.MessageType.Dir: | 218 case WebInspector.ConsoleMessage.MessageType.Dir: |
| 234 var obj = consoleMessage.parameters ? consoleMessage.parameters[ 0] : undefined; | 219 var obj = consoleMessage.parameters ? consoleMessage.parameters[ 0] : undefined; |
| 235 var args = ["%O", obj]; | 220 var args = ["%O", obj]; |
| 236 messageElement = this._format(args); | 221 messageElement = this._format(consoleMessage, linkifier, args); |
| 237 break; | 222 break; |
| 238 case WebInspector.ConsoleMessage.MessageType.Profile: | 223 case WebInspector.ConsoleMessage.MessageType.Profile: |
| 239 case WebInspector.ConsoleMessage.MessageType.ProfileEnd: | 224 case WebInspector.ConsoleMessage.MessageType.ProfileEnd: |
| 240 messageElement = this._format([consoleMessage.messageText]); | 225 messageElement = this._format(consoleMessage, linkifier, [consol eMessage.messageText]); |
| 241 break; | 226 break; |
| 242 default: | 227 default: |
| 243 if (consoleMessage.parameters && consoleMessage.parameters.lengt h === 1 && consoleMessage.parameters[0].type === "string") | 228 if (consoleMessage.parameters && consoleMessage.parameters.lengt h === 1 && consoleMessage.parameters[0].type === "string") |
| 244 messageElement = this._tryFormatAsError(/** @type {string} * /(consoleMessage.parameters[0].value)); | 229 messageElement = this._tryFormatAsError(consoleMessage.targe t(), linkifier, /** @type {string} */(consoleMessage.parameters[0].value)); |
| 245 var args = consoleMessage.parameters || [consoleMessage.messageT ext]; | 230 var args = consoleMessage.parameters || [consoleMessage.messageT ext]; |
| 246 messageElement = messageElement || this._format(args); | 231 messageElement = messageElement || this._format(consoleMessage, linkifier, args); |
| 247 } | 232 } |
| 248 } else if (consoleMessage.source === WebInspector.ConsoleMessage.Message Source.Network) { | 233 } else if (consoleMessage.source === WebInspector.ConsoleMessage.Message Source.Network) { |
| 249 if (consoleMessage.request) { | 234 if (consoleMessage.request) { |
| 250 messageElement = createElement("span"); | 235 messageElement = createElement("span"); |
| 251 if (consoleMessage.level === WebInspector.ConsoleMessage.Message Level.Error || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel .RevokedError) { | 236 if (consoleMessage.level === WebInspector.ConsoleMessage.Message Level.Error || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel .RevokedError) { |
| 252 messageElement.createTextChildren(consoleMessage.request.req uestMethod, " "); | 237 messageElement.createTextChildren(consoleMessage.request.req uestMethod, " "); |
| 253 messageElement.appendChild(WebInspector.Linkifier.linkifyUsi ngRevealer(consoleMessage.request, consoleMessage.request.url, consoleMessage.re quest.url)); | 238 messageElement.appendChild(WebInspector.Linkifier.linkifyUsi ngRevealer(consoleMessage.request, consoleMessage.request.url, consoleMessage.re quest.url)); |
| 254 if (consoleMessage.request.failed) | 239 if (consoleMessage.request.failed) |
| 255 messageElement.createTextChildren(" ", consoleMessage.re quest.localizedFailDescription); | 240 messageElement.createTextChildren(" ", consoleMessage.re quest.localizedFailDescription); |
| 256 else | 241 else |
| 257 messageElement.createTextChildren(" ", String(consoleMes sage.request.statusCode), " (", consoleMessage.request.statusText, ")"); | 242 messageElement.createTextChildren(" ", String(consoleMes sage.request.statusCode), " (", consoleMessage.request.statusText, ")"); |
| 258 } else { | 243 } else { |
| 259 var fragment = WebInspector.linkifyStringAsFragmentWithCusto mLinkifier(consoleMessage.messageText, linkifyRequest.bind(consoleMessage)); | 244 var fragment = WebInspector.linkifyStringAsFragmentWithCusto mLinkifier(consoleMessage.messageText, linkifyRequest.bind(consoleMessage)); |
| 260 messageElement.appendChild(fragment); | 245 messageElement.appendChild(fragment); |
| 261 } | 246 } |
| 262 } else { | 247 } else { |
| 263 messageElement = this._format([consoleMessage.messageText]); | 248 messageElement = this._format(consoleMessage, linkifier, [consol eMessage.messageText]); |
| 264 } | 249 } |
| 265 } else { | 250 } else { |
| 266 var args = consoleMessage.parameters || [consoleMessage.messageText] ; | 251 var args = consoleMessage.parameters || [consoleMessage.messageText] ; |
| 267 messageElement = this._format(args); | 252 messageElement = this._format(consoleMessage, linkifier, args); |
| 268 } | 253 } |
| 269 | 254 |
| 270 var formattedMessage = createElement("span"); | 255 var formattedMessage = createElement("span"); |
| 271 WebInspector.appendStyle(formattedMessage, "components/objectValue.css") ; | 256 WebInspector.appendStyle(formattedMessage, "components/objectValue.css") ; |
| 272 formattedMessage.className = "console-message-text source-code"; | 257 formattedMessage.className = "console-message-text source-code"; |
| 273 var anchorElement = this._buildMessageAnchor(consoleMessage); | 258 var anchorElement = this._buildMessageAnchor(consoleMessage, linkifier); |
| 274 if (anchorElement) | 259 if (anchorElement) |
| 275 formattedMessage.appendChild(anchorElement); | 260 formattedMessage.appendChild(anchorElement); |
| 276 formattedMessage.appendChild(messageElement); | 261 formattedMessage.appendChild(messageElement); |
| 277 | 262 |
| 278 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)) | 263 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)) |
| 279 formattedMessage = this._buildMessageStackTrace(formattedMessage, co nsoleMessage, this._linkifier); | 264 formattedMessage = this._buildMessageStackTrace(formattedMessage, co nsoleMessage, linkifier); |
| 280 return formattedMessage; | 265 return formattedMessage; |
| 281 | 266 |
| 282 /** | 267 /** |
| 283 * @param {string} title | 268 * @param {string} title |
| 284 * @return {!Element} | 269 * @return {!Element} |
| 285 * @this {WebInspector.ConsoleMessage} | 270 * @this {WebInspector.ConsoleMessage} |
| 286 */ | 271 */ |
| 287 function linkifyRequest(title) | 272 function linkifyRequest(title) |
| 288 { | 273 { |
| 289 return WebInspector.Linkifier.linkifyUsingRevealer(/** @type {!WebIn spector.NetworkRequest} */ (this.request), title, this.request.url); | 274 return WebInspector.Linkifier.linkifyUsingRevealer(/** @type {!WebIn spector.NetworkRequest} */ (this.request), title, this.request.url); |
| 290 } | 275 } |
| 291 }, | 276 }, |
| 292 | 277 |
| 293 /** | 278 /** |
| 294 * @param {!WebInspector.ConsoleMessage} consoleMessage | 279 * @param {!WebInspector.ConsoleMessage} consoleMessage |
| 280 * @param {!WebInspector.Linkifier} linkifier | |
| 295 * @return {?Element} | 281 * @return {?Element} |
| 296 */ | 282 */ |
| 297 _buildMessageAnchor: function(consoleMessage) | 283 _buildMessageAnchor: function(consoleMessage, linkifier) |
| 298 { | 284 { |
| 299 var anchorElement = null; | 285 var anchorElement = null; |
| 300 if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource. Network || consoleMessage.request) { | 286 if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource. Network || consoleMessage.request) { |
| 301 if (consoleMessage.scriptId) { | 287 if (consoleMessage.scriptId) |
| 302 anchorElement = this._linkifyScriptId(consoleMessage.scriptId, c onsoleMessage.url || "", consoleMessage.line, consoleMessage.column); | 288 anchorElement = this._linkifyScriptId(linkifier, consoleMessage) ; |
| 303 } else { | 289 else if (consoleMessage.stackTrace && consoleMessage.stackTrace.call Frames.length) |
| 304 if (consoleMessage.stackTrace && consoleMessage.stackTrace.callF rames.length) | 290 anchorElement = this._linkifyStackTraceTopFrame(linkifier, conso leMessage); |
| 305 anchorElement = this._linkifyStackTraceTopFrame(consoleMessa ge.stackTrace); | 291 else if (consoleMessage.url && consoleMessage.url !== "undefined") |
| 306 else if (consoleMessage.url && consoleMessage.url !== "undefined ") | 292 anchorElement = this._linkifyLocation(linkifier, consoleMessage) ; |
| 307 anchorElement = this._linkifyLocation(consoleMessage.url, co nsoleMessage.line, consoleMessage.column); | |
| 308 } | |
| 309 } else if (consoleMessage.url) { | 293 } else if (consoleMessage.url) { |
| 310 var url = consoleMessage.url; | 294 var url = consoleMessage.url; |
| 311 var isExternal = !WebInspector.resourceForURL(url) && !WebInspector. networkMapping.uiSourceCodeForURLForAnyTarget(url); | 295 var isExternal = !WebInspector.resourceForURL(url) && !WebInspector. networkMapping.uiSourceCodeForURLForAnyTarget(url); |
| 312 anchorElement = WebInspector.linkifyURLAsNode(url, url, "console-mes sage-url", isExternal); | 296 anchorElement = WebInspector.linkifyURLAsNode(url, url, "console-mes sage-url", isExternal); |
| 313 } | 297 } |
| 314 | 298 |
| 315 // Append a space to prevent the anchor text from being glued to the con sole message when the user selects and copies the console messages. | 299 // Append a space to prevent the anchor text from being glued to the con sole message when the user selects and copies the console messages. |
| 316 if (anchorElement) | 300 if (anchorElement) |
| 317 anchorElement.appendChild(createTextNode(" ")); | 301 anchorElement.appendChild(createTextNode(" ")); |
| 318 return anchorElement; | 302 return anchorElement; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 364 clickableElement.addEventListener("click", toggleStackTrace, false); | 348 clickableElement.addEventListener("click", toggleStackTrace, false); |
| 365 triangleElement.addEventListener("click", toggleStackTrace, false); | 349 triangleElement.addEventListener("click", toggleStackTrace, false); |
| 366 if (consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trac e) | 350 if (consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trac e) |
| 367 expandStackTrace(true); | 351 expandStackTrace(true); |
| 368 | 352 |
| 369 toggleElement._expandStackTraceForTest = expandStackTrace.bind(null, tru e); | 353 toggleElement._expandStackTraceForTest = expandStackTrace.bind(null, tru e); |
| 370 return toggleElement; | 354 return toggleElement; |
| 371 }, | 355 }, |
| 372 | 356 |
| 373 /** | 357 /** |
| 374 * @param {string} url | 358 * @param {!WebInspector.Linkifier} linkifier |
| 375 * @param {number} lineNumber | 359 * @param {!WebInspector.ConsoleMessage} consoleMessage |
| 376 * @param {number} columnNumber | |
| 377 * @return {?Element} | 360 * @return {?Element} |
| 378 */ | 361 */ |
| 379 _linkifyLocation: function(url, lineNumber, columnNumber) | 362 _linkifyLocation: function(linkifier, consoleMessage) |
| 380 { | 363 { |
| 381 var target = this._target(); | 364 var target = consoleMessage.target(); |
| 382 if (!target) | 365 if (!target) |
| 383 return null; | 366 return null; |
| 384 return this._linkifier.linkifyScriptLocation(target, null, url, lineNumb er, columnNumber, "console-message-url"); | 367 return linkifier.linkifyScriptLocation(target, null, consoleMessage.url || "", consoleMessage.line, consoleMessage.column, "console-message-url"); |
| 385 }, | 368 }, |
| 386 | 369 |
| 387 /** | 370 /** |
| 388 * @param {!RuntimeAgent.StackTrace} stackTrace | 371 * @param {!WebInspector.Linkifier} linkifier |
| 372 * @param {!WebInspector.ConsoleMessage} consoleMessage | |
| 389 * @return {?Element} | 373 * @return {?Element} |
| 390 */ | 374 */ |
| 391 _linkifyStackTraceTopFrame: function(stackTrace) | 375 _linkifyStackTraceTopFrame: function(linkifier, consoleMessage) |
| 392 { | 376 { |
| 393 var target = this._target(); | 377 var target = consoleMessage.target(); |
| 394 if (!target) | 378 if (!target) |
| 395 return null; | 379 return null; |
| 396 return this._linkifier.linkifyStackTraceTopFrame(target, stackTrace, "co nsole-message-url"); | 380 return linkifier.linkifyStackTraceTopFrame(target, /** @type {!RuntimeAg ent.StackTrace} **/ (consoleMessage.stackTrace), "console-message-url"); |
| 397 }, | 381 }, |
| 398 | 382 |
| 399 /** | 383 /** |
| 400 * @param {string} scriptId | 384 * @param {!WebInspector.Linkifier} linkifier |
| 401 * @param {string} url | 385 * @param {!WebInspector.ConsoleMessage} consoleMessage |
| 402 * @param {number} lineNumber | |
| 403 * @param {number} columnNumber | |
| 404 * @return {?Element} | 386 * @return {?Element} |
| 405 */ | 387 */ |
| 406 _linkifyScriptId: function(scriptId, url, lineNumber, columnNumber) | 388 _linkifyScriptId: function(linkifier, consoleMessage) |
| 407 { | 389 { |
| 408 var target = this._target(); | 390 var target = consoleMessage.target(); |
| 409 if (!target) | 391 if (!target) |
| 410 return null; | 392 return null; |
| 411 return this._linkifier.linkifyScriptLocation(target, scriptId, url, line Number, columnNumber, "console-message-url"); | 393 return linkifier.linkifyScriptLocation(target, consoleMessage.scriptId, consoleMessage.url || "", consoleMessage.line, consoleMessage.column, "console-m essage-url"); |
| 412 }, | 394 }, |
| 413 | 395 |
| 414 /** | 396 /** |
| 415 * @param {!WebInspector.RemoteObject|!Object|string} parameter | 397 * @param {!WebInspector.RemoteObject|!Object|string} parameter |
| 416 * @param {?WebInspector.Target} target | 398 * @param {?WebInspector.Target} target |
| 417 * @return {!WebInspector.RemoteObject} | 399 * @return {!WebInspector.RemoteObject} |
| 418 */ | 400 */ |
| 419 _parameterToRemoteObject: function(parameter, target) | 401 _parameterToRemoteObject: function(parameter, target) |
| 420 { | 402 { |
| 421 if (parameter instanceof WebInspector.RemoteObject) | 403 if (parameter instanceof WebInspector.RemoteObject) |
| 422 return parameter; | 404 return parameter; |
| 423 if (!target) | 405 if (!target) |
| 424 return WebInspector.RemoteObject.fromLocalObject(parameter); | 406 return WebInspector.RemoteObject.fromLocalObject(parameter); |
| 425 if (typeof parameter === "object") | 407 if (typeof parameter === "object") |
| 426 return target.runtimeModel.createRemoteObject(parameter); | 408 return target.runtimeModel.createRemoteObject(parameter); |
| 427 return target.runtimeModel.createRemoteObjectFromPrimitiveValue(paramete r); | 409 return target.runtimeModel.createRemoteObjectFromPrimitiveValue(paramete r); |
| 428 }, | 410 }, |
| 429 | 411 |
| 430 /** | 412 /** |
| 413 * @param {!WebInspector.ConsoleMessage} consoleMessage | |
| 414 * @param {!WebInspector.Linkifier} linkifier | |
| 431 * @param {!Array.<!WebInspector.RemoteObject|string>} parameters | 415 * @param {!Array.<!WebInspector.RemoteObject|string>} parameters |
| 432 * @return {!Element} | 416 * @return {!Element} |
| 433 */ | 417 */ |
| 434 _format: function(parameters) | 418 _format: function(consoleMessage, linkifier, parameters) |
| 435 { | 419 { |
| 436 // This node is used like a Builder. Values are continually appended ont o it. | 420 // This node is used like a Builder. Values are continually appended ont o it. |
| 437 var formattedResult = createElement("span"); | 421 var formattedResult = createElement("span"); |
| 438 if (!parameters.length) | 422 if (!parameters.length) |
| 439 return formattedResult; | 423 return formattedResult; |
| 440 | 424 |
| 441 // Formatting code below assumes that parameters are all wrappers wherea s frontend console | 425 // Formatting code below assumes that parameters are all wrappers wherea s frontend console |
| 442 // API allows passing arbitrary values as messages (strings, numbers, et c.). Wrap them here. | 426 // API allows passing arbitrary values as messages (strings, numbers, et c.). Wrap them here. |
| 443 // FIXME: Only pass runtime wrappers here. | 427 // FIXME: Only pass runtime wrappers here. |
| 444 for (var i = 0; i < parameters.length; ++i) | 428 for (var i = 0; i < parameters.length; ++i) |
| 445 parameters[i] = this._parameterToRemoteObject(parameters[i], this._t arget()); | 429 parameters[i] = this._parameterToRemoteObject(parameters[i], console Message.target()); |
| 446 | 430 |
| 447 // There can be string log and string eval result. We distinguish betwee n them based on message type. | 431 // There can be string log and string eval result. We distinguish betwee n them based on message type. |
| 448 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); | 432 var messageType = consoleMessage.type; |
| 433 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); | |
| 449 | 434 |
| 450 // Multiple parameters with the first being a format string. Save unused substitutions. | 435 // Multiple parameters with the first being a format string. Save unused substitutions. |
| 451 if (shouldFormatMessage) { | 436 if (shouldFormatMessage) { |
| 452 var result = this._formatWithSubstitutionString(/** @type {string} * */ (parameters[0].description), parameters.slice(1), formattedResult); | 437 var result = this._formatWithSubstitutionString(consoleMessage, link ifier, /** @type {string} **/ (parameters[0].description), parameters.slice(1), formattedResult); |
| 453 parameters = result.unusedSubstitutions; | 438 parameters = result.unusedSubstitutions; |
| 454 if (parameters.length) | 439 if (parameters.length) |
| 455 formattedResult.createTextChild(" "); | 440 formattedResult.createTextChild(" "); |
| 456 } | 441 } |
| 457 | 442 |
| 458 // Single parameter, or unused substitutions from above. | 443 // Single parameter, or unused substitutions from above. |
| 459 for (var i = 0; i < parameters.length; ++i) { | 444 for (var i = 0; i < parameters.length; ++i) { |
| 460 // Inline strings when formatting. | 445 // Inline strings when formatting. |
| 461 if (shouldFormatMessage && parameters[i].type === "string") | 446 if (shouldFormatMessage && parameters[i].type === "string") |
| 462 formattedResult.appendChild(WebInspector.linkifyStringAsFragment (parameters[i].description)); | 447 formattedResult.appendChild(WebInspector.linkifyStringAsFragment (parameters[i].description)); |
| 463 else | 448 else |
| 464 formattedResult.appendChild(this._formatParameter(parameters[i], false, true)); | 449 formattedResult.appendChild(this._formatParameter(consoleMessage , linkifier, parameters[i], false, true)); |
| 465 if (i < parameters.length - 1) | 450 if (i < parameters.length - 1) |
| 466 formattedResult.createTextChild(" "); | 451 formattedResult.createTextChild(" "); |
| 467 } | 452 } |
| 468 return formattedResult; | 453 return formattedResult; |
| 469 }, | 454 }, |
| 470 | 455 |
| 471 /** | 456 /** |
| 457 * @param {!WebInspector.ConsoleMessage} consoleMessage | |
| 458 * @param {!WebInspector.Linkifier} linkifier | |
| 472 * @param {!WebInspector.RemoteObject} output | 459 * @param {!WebInspector.RemoteObject} output |
| 473 * @param {boolean=} forceObjectFormat | 460 * @param {boolean=} forceObjectFormat |
| 474 * @param {boolean=} includePreview | 461 * @param {boolean=} includePreview |
| 475 * @return {!Element} | 462 * @return {!Element} |
| 476 */ | 463 */ |
| 477 _formatParameter: function(output, forceObjectFormat, includePreview) | 464 _formatParameter: function(consoleMessage, linkifier, output, forceObjectFor mat, includePreview) |
| 478 { | 465 { |
| 479 if (output.customPreview()) { | 466 if (output.customPreview()) |
| 480 return (new WebInspector.CustomPreviewComponent(output)).element; | 467 return (new WebInspector.CustomPreviewComponent(output)).element; |
| 468 | |
| 469 var messageType = consoleMessage.type; | |
| 470 var target = consoleMessage.target(); | |
| 471 var elem; | |
|
lushnikov
2016/10/01 02:54:39
element
| |
| 472 var type = forceObjectFormat ? "object" : (output.subtype || output.type ); | |
| 473 switch (type) { | |
| 474 case "array": | |
| 475 case "typedarray": | |
| 476 elem = this._formatParameterAsArray(output, linkifier, messageType); | |
| 477 break; | |
| 478 case "error": | |
| 479 elem = this._formatParameterAsError(output, linkifier, target); | |
| 480 break; | |
| 481 case "function": | |
| 482 case "generator": | |
| 483 elem = this._formatParameterAsFunction(output, includePreview); | |
| 484 break; | |
| 485 case "iterator": | |
| 486 case "map": | |
| 487 case "object": | |
| 488 case "promise": | |
| 489 case "proxy": | |
| 490 case "set": | |
| 491 elem = this._formatParameterAsObject(output, linkifier, includePrevi ew); | |
| 492 break; | |
| 493 case "node": | |
| 494 elem = this._formatParameterAsNode(output, linkifier); | |
| 495 break; | |
| 496 case "string": | |
| 497 elem = this._formatParameterAsString(output); | |
| 498 break; | |
| 499 default: | |
|
lushnikov
2016/10/01 02:54:39
can we explicitly state them all? I feel uneasy be
| |
| 500 elem = this._formatParameterAsValue(output); | |
| 481 } | 501 } |
| 482 | 502 // Do not apply object-value-string to outer string element to keep quot es black. |
| 483 var type = forceObjectFormat ? "object" : (output.subtype || output.type ); | 503 elem.className = type === "string" ? "source-code" : "object-value-" + t ype + " source-code"; |
|
luoe
2016/10/01 01:10:52
This is 'moved' from _formatParameterAsString() do
lushnikov
2016/10/01 02:54:39
let's make every formatter to specify the classnam
| |
| 484 var formatter = this._customFormatters[type] || this._formatParameterAsV alue; | 504 return elem; |
| 485 var span = createElement("span"); | |
| 486 span.className = "object-value-" + type + " source-code"; | |
| 487 formatter.call(this, output, span, includePreview); | |
| 488 return span; | |
| 489 }, | 505 }, |
| 490 | 506 |
| 491 /** | 507 /** |
| 492 * @param {!WebInspector.RemoteObject} obj | 508 * @param {!WebInspector.RemoteObject} obj |
| 493 * @param {!Element} elem | 509 * @return {!Element} |
| 494 */ | 510 */ |
| 495 _formatParameterAsValue: function(obj, elem) | 511 _formatParameterAsValue: function(obj) |
| 496 { | 512 { |
| 513 var elem = createElement("span"); | |
|
lushnikov
2016/10/01 02:54:39
createElementWithClass("span", "object-value-...")
| |
| 497 elem.createTextChild(obj.description || ""); | 514 elem.createTextChild(obj.description || ""); |
| 498 if (obj.objectId) | 515 if (obj.objectId) |
| 499 elem.addEventListener("contextmenu", this._contextMenuEventFired.bin d(this, obj), false); | 516 elem.addEventListener("contextmenu", this._contextMenuEventFired.bin d(this, obj), false); |
| 517 return elem; | |
|
lushnikov
2016/10/01 02:54:39
s/elem/element/gc
| |
| 500 }, | 518 }, |
| 501 | 519 |
| 502 /** | 520 /** |
| 503 * @param {!WebInspector.RemoteObject} obj | 521 * @param {!WebInspector.RemoteObject} obj |
| 504 * @param {!Element} elem | 522 * @param {!WebInspector.Linkifier} linkifier |
| 505 * @param {boolean=} includePreview | 523 * @param {boolean=} includePreview |
| 524 * @return {!Element} | |
| 506 */ | 525 */ |
| 507 _formatParameterAsObject: function(obj, elem, includePreview) | 526 _formatParameterAsObject: function(obj, linkifier, includePreview) |
| 508 { | 527 { |
| 509 this._formatParameterAsArrayOrObject(obj, elem, includePreview); | 528 var elem = createElement("span"); |
| 529 var sectionElement = this._objectFormatterHelper(obj, linkifier, include Preview); | |
| 530 elem.appendChild(sectionElement); | |
| 531 return elem; | |
| 510 }, | 532 }, |
| 511 | 533 |
| 512 /** | 534 /** |
| 513 * @param {!WebInspector.RemoteObject} obj | 535 * @param {!WebInspector.RemoteObject} obj |
| 514 * @param {!Element} elem | 536 * @param {!WebInspector.Linkifier} linkifier |
| 515 * @param {boolean=} includePreview | 537 * @param {boolean=} includePreview |
| 538 * @return {!Element} | |
| 516 */ | 539 */ |
| 517 _formatParameterAsArrayOrObject: function(obj, elem, includePreview) | 540 _objectFormatterHelper: function(obj, linkifier, includePreview) |
|
lushnikov
2016/10/01 02:54:39
_formatRemoteObject:
| |
| 518 { | 541 { |
| 519 var titleElement = createElement("span"); | 542 var titleElement = createElement("span"); |
| 520 if (includePreview && obj.preview) { | 543 if (includePreview && obj.preview) { |
| 521 titleElement.classList.add("console-object-preview"); | 544 titleElement.classList.add("console-object-preview"); |
| 522 this._previewFormatter.appendObjectPreview(titleElement, obj.preview ); | 545 this._previewFormatter.appendObjectPreview(titleElement, obj.preview ); |
| 546 } else if (obj.type === "function") { | |
| 547 WebInspector.ObjectPropertiesSection.formatObjectAsFunction(obj, tit leElement, false); | |
| 548 titleElement.classList.add("object-value-function"); | |
| 523 } else { | 549 } else { |
| 524 if (obj.type === "function") { | 550 titleElement.createTextChild(obj.description || ""); |
| 525 WebInspector.ObjectPropertiesSection.formatObjectAsFunction(obj, titleElement, false); | |
| 526 titleElement.classList.add("object-value-function"); | |
| 527 } else { | |
| 528 titleElement.createTextChild(obj.description || ""); | |
| 529 } | |
| 530 } | 551 } |
| 531 | 552 |
| 532 var section = new WebInspector.ObjectPropertiesSection(obj, titleElement , this._linkifier); | 553 var section = new WebInspector.ObjectPropertiesSection(obj, titleElement , linkifier); |
| 533 section.element.classList.add("console-view-object-properties-section"); | 554 section.element.classList.add("console-view-object-properties-section"); |
| 534 section.enableContextMenu(); | 555 section.enableContextMenu(); |
| 535 elem.appendChild(section.element); | 556 return section.element; |
| 536 }, | 557 }, |
| 537 | 558 |
| 538 /** | 559 /** |
| 539 * @param {!WebInspector.RemoteObject} func | 560 * @param {!WebInspector.RemoteObject} func |
| 540 * @param {!Element} element | |
| 541 * @param {boolean=} includePreview | 561 * @param {boolean=} includePreview |
| 562 * @return {!Element} | |
| 542 */ | 563 */ |
| 543 _formatParameterAsFunction: function(func, element, includePreview) | 564 _formatParameterAsFunction: function(func, includePreview) |
| 544 { | 565 { |
| 566 var elem = createElement("span"); | |
| 545 WebInspector.RemoteFunction.objectAsFunction(func).targetFunction().then (formatTargetFunction.bind(this)); | 567 WebInspector.RemoteFunction.objectAsFunction(func).targetFunction().then (formatTargetFunction.bind(this)); |
| 568 return elem; | |
| 546 | 569 |
| 547 /** | 570 /** |
| 548 * @param {!WebInspector.RemoteObject} targetFunction | 571 * @param {!WebInspector.RemoteObject} targetFunction |
| 549 * @this {WebInspector.ConsoleViewMessage} | 572 * @this {WebInspector.ConsoleViewMessage} |
| 550 */ | 573 */ |
| 551 function formatTargetFunction(targetFunction) | 574 function formatTargetFunction(targetFunction) |
| 552 { | 575 { |
| 553 var functionElement = createElement("span"); | 576 var functionElement = createElement("span"); |
| 554 WebInspector.ObjectPropertiesSection.formatObjectAsFunction(targetFu nction, functionElement, true, includePreview); | 577 WebInspector.ObjectPropertiesSection.formatObjectAsFunction(targetFu nction, functionElement, true, includePreview); |
| 555 element.appendChild(functionElement); | 578 elem.appendChild(functionElement); |
| 556 if (targetFunction !== func) { | 579 if (targetFunction !== func) { |
| 557 var note = element.createChild("span", "object-info-state-note") ; | 580 var note = elem.createChild("span", "object-info-state-note"); |
| 558 note.title = WebInspector.UIString("Function was resolved from b ound function."); | 581 note.title = WebInspector.UIString("Function was resolved from b ound function."); |
| 559 } | 582 } |
| 560 element.addEventListener("contextmenu", this._contextMenuEventFired. bind(this, targetFunction), false); | 583 elem.addEventListener("contextmenu", this._contextMenuEventFired.bin d(this, targetFunction), false); |
| 561 } | 584 } |
| 562 }, | 585 }, |
| 563 | 586 |
| 564 /** | 587 /** |
| 565 * @param {!WebInspector.RemoteObject} obj | 588 * @param {!WebInspector.RemoteObject} obj |
| 566 * @param {!Event} event | 589 * @param {!Event} event |
| 567 */ | 590 */ |
| 568 _contextMenuEventFired: function(obj, event) | 591 _contextMenuEventFired: function(obj, event) |
| 569 { | 592 { |
| 570 var contextMenu = new WebInspector.ContextMenu(event); | 593 var contextMenu = new WebInspector.ContextMenu(event); |
| 571 contextMenu.appendApplicableItems(obj); | 594 contextMenu.appendApplicableItems(obj); |
| 572 contextMenu.show(); | 595 contextMenu.show(); |
| 573 }, | 596 }, |
| 574 | 597 |
| 575 /** | 598 /** |
| 576 * @param {?WebInspector.RemoteObject} object | 599 * @param {?WebInspector.RemoteObject} object |
| 577 * @param {!Array.<!RuntimeAgent.PropertyPreview>} propertyPath | 600 * @param {!Array.<!RuntimeAgent.PropertyPreview>} propertyPath |
| 578 * @return {!Element} | 601 * @return {!Element} |
| 579 */ | 602 */ |
| 580 _renderPropertyPreviewOrAccessor: function(object, propertyPath) | 603 _renderPropertyPreviewOrAccessor: function(object, propertyPath) |
| 581 { | 604 { |
| 582 var property = propertyPath.peekLast(); | 605 var property = propertyPath.peekLast(); |
| 583 if (property.type === "accessor") | 606 if (property.type === "accessor") |
| 584 return this._formatAsAccessorProperty(object, propertyPath.map(prope rty => property.name), false); | 607 return this._formatAsAccessorProperty(object, propertyPath.map(prope rty => property.name), false); |
| 585 return this._previewFormatter.renderPropertyPreview(property.type, /** @ type {string} */ (property.subtype), property.value); | 608 return this._previewFormatter.renderPropertyPreview(property.type, /** @ type {string} */ (property.subtype), property.value); |
| 586 }, | 609 }, |
| 587 | 610 |
| 588 /** | 611 /** |
| 589 * @param {!WebInspector.RemoteObject} object | 612 * @param {!WebInspector.RemoteObject} obj |
|
lushnikov
2016/10/01 02:54:39
object
| |
| 590 * @param {!Element} elem | 613 * @param {!WebInspector.Linkifier} linkifier |
| 614 * @return {!Element} | |
| 591 */ | 615 */ |
| 592 _formatParameterAsNode: function(object, elem) | 616 _formatParameterAsNode: function(obj, linkifier) |
| 593 { | 617 { |
| 594 WebInspector.Renderer.renderPromise(object).then(appendRenderer.bind(thi s), failedToRender.bind(this)); | 618 var elem = createElement("span"); |
|
lushnikov
2016/10/01 02:54:39
element
| |
| 619 WebInspector.Renderer.renderPromise(obj).then(appendRenderer.bind(this), failedToRender.bind(this)); | |
| 620 return elem; | |
| 621 | |
| 595 /** | 622 /** |
| 596 * @param {!Element} rendererElement | 623 * @param {!Element} rendererElement |
| 597 * @this {WebInspector.ConsoleViewMessage} | 624 * @this {WebInspector.ConsoleViewMessage} |
| 598 */ | 625 */ |
| 599 function appendRenderer(rendererElement) | 626 function appendRenderer(rendererElement) |
| 600 { | 627 { |
| 601 elem.appendChild(rendererElement); | 628 elem.appendChild(rendererElement); |
| 602 this._formattedParameterAsNodeForTest(); | 629 this._formattedParameterAsNodeForTest(); |
| 603 } | 630 } |
| 604 | 631 |
| 605 /** | 632 /** |
| 606 * @this {WebInspector.ConsoleViewMessage} | 633 * @this {WebInspector.ConsoleViewMessage} |
| 607 */ | 634 */ |
| 608 function failedToRender() | 635 function failedToRender() |
| 609 { | 636 { |
| 610 this._formatParameterAsObject(object, elem, false); | 637 var sectionElement = this._objectFormatterHelper(obj, linkifier, fal se); |
| 638 elem.appendChild(sectionElement); | |
| 611 } | 639 } |
| 612 }, | 640 }, |
| 613 | 641 |
| 614 _formattedParameterAsNodeForTest: function() | 642 _formattedParameterAsNodeForTest: function() |
| 615 { | 643 { |
| 616 }, | 644 }, |
| 617 | 645 |
| 618 /** | 646 /** |
| 619 * @return {boolean} | 647 * @param {!WebInspector.RemoteObject} array |
| 648 * @param {!WebInspector.Linkifier} linkifier | |
| 649 * @param {string} messageType | |
| 650 * @return {!Element} | |
| 620 */ | 651 */ |
| 621 _usePrintedArrayFormatter: function() | 652 _formatParameterAsArray: function(array, linkifier, messageType) |
| 622 { | 653 { |
| 623 return this._message.type !== WebInspector.ConsoleMessage.MessageType.Di rXML && this._message.type !== WebInspector.ConsoleMessage.MessageType.Result; | 654 var elem = createElement("span"); |
| 655 var usePrintedArrayFormat = messageType !== WebInspector.ConsoleMessage. MessageType.DirXML && messageType !== WebInspector.ConsoleMessage.MessageType.Re sult; | |
| 656 var maxFlatArrayLength = 100; | |
| 657 if (usePrintedArrayFormat || array.arrayLength() > maxFlatArrayLength) | |
| 658 return this._formatParameterAsObject(array, linkifier, usePrintedArr ayFormat || array.arrayLength() <= maxFlatArrayLength); | |
| 659 array.getAllProperties(false, this._printArrayResult.bind(this, array, e lem, linkifier)); | |
| 660 return elem; | |
| 661 }, | |
| 662 | |
| 663 /** | |
| 664 * @param {!WebInspector.RemoteObject} output | |
| 665 * @return {!Element} | |
| 666 */ | |
| 667 _formatParameterAsString: function(output) | |
| 668 { | |
| 669 var elem = createElement("span"); | |
| 670 var span = createElement("span"); | |
| 671 span.className = "object-value-string source-code"; | |
| 672 span.appendChild(WebInspector.linkifyStringAsFragment(output.description || "")); | |
| 673 | |
| 674 elem.createTextChild("\""); | |
| 675 elem.appendChild(span); | |
| 676 elem.createTextChild("\""); | |
| 677 return elem; | |
| 678 }, | |
| 679 | |
| 680 /** | |
| 681 * @param {!WebInspector.RemoteObject} output | |
| 682 * @param {!WebInspector.Linkifier} linkifier | |
| 683 * @param {?WebInspector.Target} target | |
| 684 * @return {!Element} | |
| 685 */ | |
| 686 _formatParameterAsError: function(output, linkifier, target) | |
| 687 { | |
| 688 var elem = createElement("span"); | |
| 689 var span = elem.createChild("span", "object-value-error source-code"); | |
| 690 var errorSpan = this._tryFormatAsError(target, linkifier, output.descrip tion || ""); | |
| 691 span.appendChild(errorSpan ? errorSpan : WebInspector.linkifyStringAsFra gment(output.description || "")); | |
| 692 return elem; | |
| 624 }, | 693 }, |
| 625 | 694 |
| 626 /** | 695 /** |
| 627 * @param {!WebInspector.RemoteObject} array | 696 * @param {!WebInspector.RemoteObject} array |
| 628 * @param {!Element} elem | 697 * @param {!Element} elem |
| 629 */ | 698 * @param {!WebInspector.Linkifier} linkifier |
| 630 _formatParameterAsArray: function(array, elem) | |
| 631 { | |
| 632 var maxFlatArrayLength = 100; | |
| 633 if (this._usePrintedArrayFormatter() || array.arrayLength() > maxFlatArr ayLength) | |
| 634 this._formatParameterAsArrayOrObject(array, elem, this._usePrintedAr rayFormatter() || array.arrayLength() <= maxFlatArrayLength); | |
| 635 else | |
| 636 array.getAllProperties(false, this._printArrayResult.bind(this, arra y, elem)); | |
| 637 }, | |
| 638 | |
| 639 /** | |
| 640 * @param {!WebInspector.RemoteObject} output | |
| 641 * @param {!Element} elem | |
| 642 */ | |
| 643 _formatParameterAsString: function(output, elem) | |
| 644 { | |
| 645 var span = createElement("span"); | |
| 646 span.className = "object-value-string source-code"; | |
| 647 span.appendChild(WebInspector.linkifyStringAsFragment(output.description || "")); | |
| 648 | |
| 649 // Make black quotes. | |
| 650 elem.classList.remove("object-value-string"); | |
| 651 elem.createTextChild("\""); | |
| 652 elem.appendChild(span); | |
| 653 elem.createTextChild("\""); | |
| 654 }, | |
| 655 | |
| 656 /** | |
| 657 * @param {!WebInspector.RemoteObject} output | |
| 658 * @param {!Element} elem | |
| 659 */ | |
| 660 _formatParameterAsError: function(output, elem) | |
| 661 { | |
| 662 var span = elem.createChild("span", "object-value-error source-code"); | |
| 663 var errorSpan = this._tryFormatAsError(output.description || ""); | |
| 664 span.appendChild(errorSpan ? errorSpan : WebInspector.linkifyStringAsFra gment(output.description || "")); | |
| 665 }, | |
| 666 | |
| 667 /** | |
| 668 * @param {!WebInspector.RemoteObject} array | |
| 669 * @param {!Element} elem | |
| 670 * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties | 699 * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties |
| 671 */ | 700 */ |
| 672 _printArrayResult: function(array, elem, properties) | 701 _printArrayResult: function(array, elem, linkifier, properties) |
|
lushnikov
2016/10/01 02:54:39
probably, you should create and return element her
| |
| 673 { | 702 { |
| 674 if (!properties) { | 703 if (!properties) { |
| 675 this._formatParameterAsObject(array, elem, false); | 704 var sectionElement = this._objectFormatterHelper(array, linkifier, f alse); |
| 705 elem.appendChild(sectionElement); | |
| 676 return; | 706 return; |
| 677 } | 707 } |
| 678 | 708 |
| 679 var titleElement = createElement("span"); | 709 var titleElement = createElement("span"); |
| 680 var elements = {}; | 710 var elements = {}; |
| 681 for (var i = 0; i < properties.length; ++i) { | 711 for (var i = 0; i < properties.length; ++i) { |
| 682 var property = properties[i]; | 712 var property = properties[i]; |
| 683 var name = property.name; | 713 var name = property.name; |
| 684 if (isNaN(name)) | 714 if (isNaN(name)) |
| 685 continue; | 715 continue; |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 713 | 743 |
| 714 titleElement.appendChild(element); | 744 titleElement.appendChild(element); |
| 715 lastNonEmptyIndex = i; | 745 lastNonEmptyIndex = i; |
| 716 if (i < length - 1) | 746 if (i < length - 1) |
| 717 titleElement.createTextChild(", "); | 747 titleElement.createTextChild(", "); |
| 718 } | 748 } |
| 719 appendUndefined(titleElement, length); | 749 appendUndefined(titleElement, length); |
| 720 | 750 |
| 721 titleElement.createTextChild("]"); | 751 titleElement.createTextChild("]"); |
| 722 | 752 |
| 723 var section = new WebInspector.ObjectPropertiesSection(array, titleEleme nt, this._linkifier); | 753 var section = new WebInspector.ObjectPropertiesSection(array, titleEleme nt, linkifier); |
| 724 section.element.classList.add("console-view-object-properties-section"); | 754 section.element.classList.add("console-view-object-properties-section"); |
| 725 section.enableContextMenu(); | 755 section.enableContextMenu(); |
| 726 elem.appendChild(section.element); | 756 elem.appendChild(section.element); |
| 727 }, | 757 }, |
| 728 | 758 |
| 729 /** | 759 /** |
| 730 * @param {!WebInspector.RemoteObject} output | 760 * @param {!WebInspector.RemoteObject} output |
| 731 * @return {!Element} | 761 * @return {!Element} |
| 732 */ | 762 */ |
| 733 _formatAsArrayEntry: function(output) | 763 _formatAsArrayEntry: function(output) |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 774 description = result.description.trimEnd(maxLength); | 804 description = result.description.trimEnd(maxLength); |
| 775 } | 805 } |
| 776 rootElement.appendChild(this._previewFormatter.renderPropertyPre view(type, subtype, description)); | 806 rootElement.appendChild(this._previewFormatter.renderPropertyPre view(type, subtype, description)); |
| 777 } | 807 } |
| 778 } | 808 } |
| 779 | 809 |
| 780 return rootElement; | 810 return rootElement; |
| 781 }, | 811 }, |
| 782 | 812 |
| 783 /** | 813 /** |
| 814 * @param {!WebInspector.ConsoleMessage} consoleMessage | |
| 815 * @param {!WebInspector.Linkifier} linkifier | |
| 784 * @param {string} format | 816 * @param {string} format |
| 785 * @param {!Array.<!WebInspector.RemoteObject>} parameters | 817 * @param {!Array.<!WebInspector.RemoteObject>} parameters |
| 786 * @param {!Element} formattedResult | 818 * @param {!Element} formattedResult |
| 787 */ | 819 */ |
| 788 _formatWithSubstitutionString: function(format, parameters, formattedResult) | 820 _formatWithSubstitutionString: function(consoleMessage, linkifier, format, p arameters, formattedResult) |
| 789 { | 821 { |
| 790 var formatters = {}; | 822 var formatters = {}; |
| 791 | 823 |
| 792 /** | 824 /** |
| 825 * @param {!WebInspector.RemoteObject} obj | |
| 793 * @param {boolean} force | 826 * @param {boolean} force |
| 794 * @param {!WebInspector.RemoteObject} obj | |
| 795 * @return {!Element} | 827 * @return {!Element} |
| 796 * @this {WebInspector.ConsoleViewMessage} | 828 * @this {WebInspector.ConsoleViewMessage} |
| 797 */ | 829 */ |
| 798 function parameterFormatter(force, obj) | 830 function parameterFormatter(force, obj) |
| 799 { | 831 { |
| 800 return this._formatParameter(obj, force, false); | 832 return this._formatParameter(consoleMessage, linkifier, obj, force, false); |
| 801 } | 833 } |
| 802 | 834 |
| 803 function stringFormatter(obj) | 835 function stringFormatter(obj) |
| 804 { | 836 { |
| 805 return obj.description; | 837 return obj.description; |
| 806 } | 838 } |
| 807 | 839 |
| 808 function floatFormatter(obj) | 840 function floatFormatter(obj) |
| 809 { | 841 { |
| 810 if (typeof obj.value !== "number") | 842 if (typeof obj.value !== "number") |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 968 | 1000 |
| 969 var contentElement = createElementWithClass("div", "console-message"); | 1001 var contentElement = createElementWithClass("div", "console-message"); |
| 970 this._contentElement = contentElement; | 1002 this._contentElement = contentElement; |
| 971 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Start Group || this._message.type === WebInspector.ConsoleMessage.MessageType.StartGro upCollapsed) | 1003 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Start Group || this._message.type === WebInspector.ConsoleMessage.MessageType.StartGro upCollapsed) |
| 972 contentElement.classList.add("console-group-title"); | 1004 contentElement.classList.add("console-group-title"); |
| 973 | 1005 |
| 974 var formattedMessage; | 1006 var formattedMessage; |
| 975 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table ) | 1007 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table ) |
| 976 formattedMessage = this._buildTableMessage(this._message); | 1008 formattedMessage = this._buildTableMessage(this._message); |
| 977 else | 1009 else |
| 978 formattedMessage = this._buildMessage(this._message); | 1010 formattedMessage = this._buildMessage(this._message, this._linkifier ); |
| 979 contentElement.appendChild(formattedMessage); | 1011 contentElement.appendChild(formattedMessage); |
| 980 | 1012 |
| 981 this.updateTimestamp(WebInspector.moduleSetting("consoleTimestampsEnable d").get()); | 1013 this.updateTimestamp(WebInspector.moduleSetting("consoleTimestampsEnable d").get()); |
| 982 return this._contentElement; | 1014 return this._contentElement; |
| 983 }, | 1015 }, |
| 984 | 1016 |
| 985 /** | 1017 /** |
| 986 * @return {!Element} | 1018 * @return {!Element} |
| 987 */ | 1019 */ |
| 988 toMessageElement: function() | 1020 toMessageElement: function() |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1132 | 1164 |
| 1133 /** | 1165 /** |
| 1134 * @return {!Element} | 1166 * @return {!Element} |
| 1135 */ | 1167 */ |
| 1136 searchHighlightNode: function(index) | 1168 searchHighlightNode: function(index) |
| 1137 { | 1169 { |
| 1138 return this._searchHighlightNodes[index]; | 1170 return this._searchHighlightNodes[index]; |
| 1139 }, | 1171 }, |
| 1140 | 1172 |
| 1141 /** | 1173 /** |
| 1174 * @param {?WebInspector.Target} target | |
| 1175 * @param {!WebInspector.Linkifier} linkifier | |
| 1142 * @param {string} string | 1176 * @param {string} string |
| 1143 * @return {?Element} | 1177 * @return {?Element} |
| 1144 */ | 1178 */ |
| 1145 _tryFormatAsError: function(string) | 1179 _tryFormatAsError: function(target, linkifier, string) |
| 1146 { | 1180 { |
| 1147 /** | 1181 /** |
| 1148 * @param {string} prefix | 1182 * @param {string} prefix |
| 1149 */ | 1183 */ |
| 1150 function startsWith(prefix) | 1184 function startsWith(prefix) |
| 1151 { | 1185 { |
| 1152 return string.startsWith(prefix); | 1186 return string.startsWith(prefix); |
| 1153 } | 1187 } |
| 1154 | 1188 |
| 1155 var errorPrefixes = ["EvalError", "ReferenceError", "SyntaxError", "Type Error", "RangeError", "Error", "URIError"]; | 1189 var errorPrefixes = ["EvalError", "ReferenceError", "SyntaxError", "Type Error", "RangeError", "Error", "URIError"]; |
| 1156 var target = this._target(); | |
| 1157 if (!target || !errorPrefixes.some(startsWith)) | 1190 if (!target || !errorPrefixes.some(startsWith)) |
| 1158 return null; | 1191 return null; |
| 1159 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); | 1192 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
| 1160 if (!debuggerModel) | 1193 if (!debuggerModel) |
| 1161 return null; | 1194 return null; |
| 1162 | 1195 |
| 1163 var lines = string.split("\n"); | 1196 var lines = string.split("\n"); |
| 1164 var links = []; | 1197 var links = []; |
| 1165 var position = 0; | 1198 var position = 0; |
| 1166 for (var i = 0; i < lines.length; ++i) { | 1199 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}); | 1234 links.push({url: url, positionLeft: position + left, positionRight: position + right, lineNumber: splitResult.lineNumber, columnNumber: splitResult. columnNumber}); |
| 1202 } | 1235 } |
| 1203 | 1236 |
| 1204 if (!links.length) | 1237 if (!links.length) |
| 1205 return null; | 1238 return null; |
| 1206 | 1239 |
| 1207 var formattedResult = createElement("span"); | 1240 var formattedResult = createElement("span"); |
| 1208 var start = 0; | 1241 var start = 0; |
| 1209 for (var i = 0; i < links.length; ++i) { | 1242 for (var i = 0; i < links.length; ++i) { |
| 1210 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(str ing.substring(start, links[i].positionLeft))); | 1243 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)); | 1244 formattedResult.appendChild(linkifier.linkifyScriptLocation(target, null, links[i].url, links[i].lineNumber, links[i].columnNumber)); |
| 1212 start = links[i].positionRight; | 1245 start = links[i].positionRight; |
| 1213 } | 1246 } |
| 1214 | 1247 |
| 1215 if (start !== string.length) | 1248 if (start !== string.length) |
| 1216 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(str ing.substring(start))); | 1249 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(str ing.substring(start))); |
| 1217 | 1250 |
| 1218 return formattedResult; | 1251 return formattedResult; |
| 1219 } | 1252 } |
| 1220 } | 1253 } |
| 1221 | 1254 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1260 { | 1293 { |
| 1261 if (!this._element) { | 1294 if (!this._element) { |
| 1262 WebInspector.ConsoleViewMessage.prototype.toMessageElement.call(this ); | 1295 WebInspector.ConsoleViewMessage.prototype.toMessageElement.call(this ); |
| 1263 this._element.classList.toggle("collapsed", this._collapsed); | 1296 this._element.classList.toggle("collapsed", this._collapsed); |
| 1264 } | 1297 } |
| 1265 return this._element; | 1298 return this._element; |
| 1266 }, | 1299 }, |
| 1267 | 1300 |
| 1268 __proto__: WebInspector.ConsoleViewMessage.prototype | 1301 __proto__: WebInspector.ConsoleViewMessage.prototype |
| 1269 } | 1302 } |
| OLD | NEW |