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