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

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

Issue 2373113003: DevTools: ConsoleViewMessage isolate _formatMessageAsTable() and single dataGrid (Closed)
Patch Set: ac-2, datagrid typo 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 25 matching lines...) Expand all
36 * @param {number} nestingLevel 36 * @param {number} nestingLevel
37 */ 37 */
38 WebInspector.ConsoleViewMessage = function(consoleMessage, linkifier, nestingLev el) 38 WebInspector.ConsoleViewMessage = function(consoleMessage, linkifier, nestingLev el)
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 {!Array.<!WebInspector.DataGrid>} */ 46 /** @type {?WebInspector.DataGrid} */
47 this._dataGrids = []; 47 this._dataGrid = null;
48 48
49 /** @type {!Object.<string, function(!WebInspector.RemoteObject, !Element, b oolean=)>} */ 49 /** @type {!Object.<string, function(!WebInspector.RemoteObject, !Element, b oolean=)>} */
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,
(...skipping 24 matching lines...) Expand all
82 element: function() 82 element: function()
83 { 83 {
84 return this.toMessageElement(); 84 return this.toMessageElement();
85 }, 85 },
86 86
87 /** 87 /**
88 * @override 88 * @override
89 */ 89 */
90 wasShown: function() 90 wasShown: function()
91 { 91 {
92 for (var i = 0; this._dataGrids && i < this._dataGrids.length; ++i) 92 if (this._dataGrid)
93 this._dataGrids[i].updateWidths(); 93 this._dataGrid.updateWidths();
94 this._isVisible = true; 94 this._isVisible = true;
95 }, 95 },
96 96
97 onResize: function() 97 onResize: function()
98 { 98 {
99 if (!this._isVisible) 99 if (!this._isVisible)
100 return; 100 return;
101 for (var i = 0; this._dataGrids && i < this._dataGrids.length; ++i) 101 if (this._dataGrid)
102 this._dataGrids[i].onResize(); 102 this._dataGrid.onResize();
103 }, 103 },
104 104
105 /** 105 /**
106 * @override 106 * @override
107 */ 107 */
108 willHide: function() 108 willHide: function()
109 { 109 {
110 this._isVisible = false; 110 this._isVisible = false;
111 this._cachedHeight = this.contentElement().offsetHeight; 111 this._cachedHeight = this.contentElement().offsetHeight;
112 }, 112 },
(...skipping 21 matching lines...) Expand all
134 */ 134 */
135 consoleMessage: function() 135 consoleMessage: function()
136 { 136 {
137 return this._message; 137 return this._message;
138 }, 138 },
139 139
140 /** 140 /**
141 * @param {!WebInspector.ConsoleMessage} consoleMessage 141 * @param {!WebInspector.ConsoleMessage} consoleMessage
142 * @return {!Element} 142 * @return {!Element}
143 */ 143 */
144 _formatMessageAsTable: function(consoleMessage)
lushnikov 2016/09/30 21:30:47 _buildTableMessage:
luoe 2016/09/30 23:33:02 Done.
145 {
146 var formattedResult = createElement("span");
147 var table = consoleMessage.parameters && consoleMessage.parameters.lengt h ? consoleMessage.parameters[0] : null;
148 if (table)
149 table = this._parameterToRemoteObject(table, this._target());
150 if (!table || !table.preview)
151 return this._buildMessageAnchor(formattedResult, consoleMessage);
152
153 var columnNames = [];
154 var preview = table.preview;
155 var rows = [];
156 for (var i = 0; i < preview.properties.length; ++i) {
157 var rowProperty = preview.properties[i];
158 var rowPreview = rowProperty.valuePreview;
159 if (!rowPreview)
160 continue;
161
162 var rowValue = {};
163 const maxColumnsToRender = 20;
164 for (var j = 0; j < rowPreview.properties.length; ++j) {
165 var cellProperty = rowPreview.properties[j];
166 var columnRendered = columnNames.indexOf(cellProperty.name) !== -1;
167 if (!columnRendered) {
168 if (columnNames.length === maxColumnsToRender)
169 continue;
170 columnRendered = true;
171 columnNames.push(cellProperty.name);
172 }
173
174 if (columnRendered) {
175 var cellElement = this._renderPropertyPreviewOrAccessor(tabl e, [rowProperty, cellProperty]);
176 cellElement.classList.add("console-message-nowrap-below");
177 rowValue[cellProperty.name] = cellElement;
178 }
179 }
180 rows.push([rowProperty.name, rowValue]);
181 }
182
183 var flatValues = [];
184 for (var i = 0; i < rows.length; ++i) {
185 var rowName = rows[i][0];
186 var rowValue = rows[i][1];
187 flatValues.push(rowName);
188 for (var j = 0; j < columnNames.length; ++j)
189 flatValues.push(rowValue[columnNames[j]]);
190 }
191 columnNames.unshift(WebInspector.UIString("(index)"));
192
193 if (flatValues.length) {
194 this._dataGrid = WebInspector.SortableDataGrid.create(columnNames, f latValues);
195
196 var tableElement = formattedResult.createChild("div", "console-messa ge-formatted-table");
197 var dataGridContainer = tableElement.createChild("span");
198 tableElement.appendChild(this._formatParameter(table, true, false));
199 this._dataGrid.renderInline();
200 dataGridContainer.appendChild(this._dataGrid.element);
201 return this._buildMessageAnchor(formattedResult, consoleMessage);
202 }
203 return this._buildMessageAnchor(formattedResult, consoleMessage);
204 },
205
206 /**
207 * @param {!WebInspector.ConsoleMessage} consoleMessage
208 * @return {!Element}
209 */
144 _buildMessage: function(consoleMessage) 210 _buildMessage: function(consoleMessage)
145 { 211 {
146 var messageElement; 212 var messageElement;
147 if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource. ConsoleAPI) { 213 if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource. ConsoleAPI) {
148 switch (consoleMessage.type) { 214 switch (consoleMessage.type) {
149 case WebInspector.ConsoleMessage.MessageType.Trace: 215 case WebInspector.ConsoleMessage.MessageType.Trace:
150 messageElement = this._format(consoleMessage.parameters || ["con sole.trace"]); 216 messageElement = this._format(consoleMessage.parameters || ["con sole.trace"]);
151 break; 217 break;
152 case WebInspector.ConsoleMessage.MessageType.Clear: 218 case WebInspector.ConsoleMessage.MessageType.Clear:
153 messageElement = createElementWithClass("span", "console-info"); 219 messageElement = createElementWithClass("span", "console-info");
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 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 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);
379 445
380 // Multiple parameters with the first being a format string. Save unused substitutions. 446 // Multiple parameters with the first being a format string. Save unused substitutions.
381 if (shouldFormatMessage) { 447 if (shouldFormatMessage) {
382 var result = this._formatWithSubstitutionString(/** @type {string} * */ (parameters[0].description), parameters.slice(1), formattedResult); 448 var result = this._formatWithSubstitutionString(/** @type {string} * */ (parameters[0].description), parameters.slice(1), formattedResult);
383 parameters = result.unusedSubstitutions; 449 parameters = result.unusedSubstitutions;
384 if (parameters.length) 450 if (parameters.length)
385 formattedResult.createTextChild(" "); 451 formattedResult.createTextChild(" ");
386 } 452 }
387 453
388 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table ) {
389 formattedResult.appendChild(this._formatParameterAsTable(parameters) );
390 return formattedResult;
391 }
392
393 // Single parameter, or unused substitutions from above. 454 // Single parameter, or unused substitutions from above.
394 for (var i = 0; i < parameters.length; ++i) { 455 for (var i = 0; i < parameters.length; ++i) {
395 // Inline strings when formatting. 456 // Inline strings when formatting.
396 if (shouldFormatMessage && parameters[i].type === "string") 457 if (shouldFormatMessage && parameters[i].type === "string")
397 formattedResult.appendChild(WebInspector.linkifyStringAsFragment (parameters[i].description)); 458 formattedResult.appendChild(WebInspector.linkifyStringAsFragment (parameters[i].description));
398 else 459 else
399 formattedResult.appendChild(this._formatParameter(parameters[i], false, true)); 460 formattedResult.appendChild(this._formatParameter(parameters[i], false, true));
400 if (i < parameters.length - 1) 461 if (i < parameters.length - 1)
401 formattedResult.createTextChild(" "); 462 formattedResult.createTextChild(" ");
402 } 463 }
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 _formatParameterAsArray: function(array, elem) 627 _formatParameterAsArray: function(array, elem)
567 { 628 {
568 var maxFlatArrayLength = 100; 629 var maxFlatArrayLength = 100;
569 if (this.useArrayPreviewInFormatter(array) || array.arrayLength() > maxF latArrayLength) 630 if (this.useArrayPreviewInFormatter(array) || array.arrayLength() > maxF latArrayLength)
570 this._formatParameterAsArrayOrObject(array, elem, this.useArrayPrevi ewInFormatter(array) || array.arrayLength() <= maxFlatArrayLength); 631 this._formatParameterAsArrayOrObject(array, elem, this.useArrayPrevi ewInFormatter(array) || array.arrayLength() <= maxFlatArrayLength);
571 else 632 else
572 array.getAllProperties(false, this._printArrayResult.bind(this, arra y, elem)); 633 array.getAllProperties(false, this._printArrayResult.bind(this, arra y, elem));
573 }, 634 },
574 635
575 /** 636 /**
576 * @param {!Array.<!WebInspector.RemoteObject>} parameters
577 * @return {!Element}
578 */
579 _formatParameterAsTable: function(parameters)
580 {
581 var element = createElementWithClass("div", "console-message-formatted-t able");
582 var table = parameters[0];
583 if (!table || !table.preview)
584 return element;
585
586 var columnNames = [];
587 var preview = table.preview;
588 var rows = [];
589 for (var i = 0; i < preview.properties.length; ++i) {
590 var rowProperty = preview.properties[i];
591 var rowPreview = rowProperty.valuePreview;
592 if (!rowPreview)
593 continue;
594
595 var rowValue = {};
596 const maxColumnsToRender = 20;
597 for (var j = 0; j < rowPreview.properties.length; ++j) {
598 var cellProperty = rowPreview.properties[j];
599 var columnRendered = columnNames.indexOf(cellProperty.name) !== -1;
600 if (!columnRendered) {
601 if (columnNames.length === maxColumnsToRender)
602 continue;
603 columnRendered = true;
604 columnNames.push(cellProperty.name);
605 }
606
607 if (columnRendered) {
608 var cellElement = this._renderPropertyPreviewOrAccessor(tabl e, [rowProperty, cellProperty]);
609 cellElement.classList.add("console-message-nowrap-below");
610 rowValue[cellProperty.name] = cellElement;
611 }
612 }
613 rows.push([rowProperty.name, rowValue]);
614 }
615
616 var flatValues = [];
617 for (var i = 0; i < rows.length; ++i) {
618 var rowName = rows[i][0];
619 var rowValue = rows[i][1];
620 flatValues.push(rowName);
621 for (var j = 0; j < columnNames.length; ++j)
622 flatValues.push(rowValue[columnNames[j]]);
623 }
624
625 var dataGridContainer = element.createChild("span");
626 element.appendChild(this._formatParameter(table, true, false));
627 if (!flatValues.length)
628 return element;
629
630 columnNames.unshift(WebInspector.UIString("(index)"));
631 var dataGrid = WebInspector.SortableDataGrid.create(columnNames, flatVal ues);
632 dataGrid.renderInline();
633 dataGridContainer.appendChild(dataGrid.element);
634 this._dataGrids.push(dataGrid);
635 return element;
636 },
637
638 /**
639 * @param {!WebInspector.RemoteObject} output 637 * @param {!WebInspector.RemoteObject} output
640 * @param {!Element} elem 638 * @param {!Element} elem
641 */ 639 */
642 _formatParameterAsString: function(output, elem) 640 _formatParameterAsString: function(output, elem)
643 { 641 {
644 var span = createElement("span"); 642 var span = createElement("span");
645 span.className = "object-value-string source-code"; 643 span.className = "object-value-string source-code";
646 span.appendChild(WebInspector.linkifyStringAsFragment(output.description || "")); 644 span.appendChild(WebInspector.linkifyStringAsFragment(output.description || ""));
647 645
648 // Make black quotes. 646 // Make black quotes.
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 contentElement: function() 965 contentElement: function()
968 { 966 {
969 if (this._contentElement) 967 if (this._contentElement)
970 return this._contentElement; 968 return this._contentElement;
971 969
972 var contentElement = createElementWithClass("div", "console-message"); 970 var contentElement = createElementWithClass("div", "console-message");
973 this._contentElement = contentElement; 971 this._contentElement = contentElement;
974 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Start Group || this._message.type === WebInspector.ConsoleMessage.MessageType.StartGro upCollapsed) 972 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Start Group || this._message.type === WebInspector.ConsoleMessage.MessageType.StartGro upCollapsed)
975 contentElement.classList.add("console-group-title"); 973 contentElement.classList.add("console-group-title");
976 974
977 var formattedMessage = this._buildMessage(this._message); 975 var formattedMessage;
976 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table )
977 formattedMessage = this._formatMessageAsTable(this._message);
978 else
979 formattedMessage = this._buildMessage(this._message);
978 contentElement.appendChild(formattedMessage); 980 contentElement.appendChild(formattedMessage);
979 981
980 this.updateTimestamp(WebInspector.moduleSetting("consoleTimestampsEnable d").get()); 982 this.updateTimestamp(WebInspector.moduleSetting("consoleTimestampsEnable d").get());
981 return this._contentElement; 983 return this._contentElement;
982 }, 984 },
983 985
984 /** 986 /**
985 * @return {!Element} 987 * @return {!Element}
986 */ 988 */
987 toMessageElement: function() 989 toMessageElement: function()
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
1259 { 1261 {
1260 if (!this._element) { 1262 if (!this._element) {
1261 WebInspector.ConsoleViewMessage.prototype.toMessageElement.call(this ); 1263 WebInspector.ConsoleViewMessage.prototype.toMessageElement.call(this );
1262 this._element.classList.toggle("collapsed", this._collapsed); 1264 this._element.classList.toggle("collapsed", this._collapsed);
1263 } 1265 }
1264 return this._element; 1266 return this._element;
1265 }, 1267 },
1266 1268
1267 __proto__: WebInspector.ConsoleViewMessage.prototype 1269 __proto__: WebInspector.ConsoleViewMessage.prototype
1268 } 1270 }
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