Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js

Issue 2383293002: DevTools: ConsoleViewMessage rewrite signatures to isolate formatting functions (Closed)
Patch Set: use switch instead Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698