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 |