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

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

Issue 2514893004: DevTools: show array entries that are getters (Closed)
Patch Set: Add needsManualRebase to TE Created 4 years, 1 month 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
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 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 var cellProperty = rowPreview.properties[j]; 146 var cellProperty = rowPreview.properties[j];
147 var columnRendered = columnNames.indexOf(cellProperty.name) !== -1; 147 var columnRendered = columnNames.indexOf(cellProperty.name) !== -1;
148 if (!columnRendered) { 148 if (!columnRendered) {
149 if (columnNames.length === maxColumnsToRender) 149 if (columnNames.length === maxColumnsToRender)
150 continue; 150 continue;
151 columnRendered = true; 151 columnRendered = true;
152 columnNames.push(cellProperty.name); 152 columnNames.push(cellProperty.name);
153 } 153 }
154 154
155 if (columnRendered) { 155 if (columnRendered) {
156 var cellElement = this._renderPropertyPreviewOrAccessor(table, [rowPro perty, cellProperty]); 156 var cellElement = this._previewFormatter.renderPropertyPreviewOrAccess or([rowProperty, cellProperty], table);
157 cellElement.classList.add('console-message-nowrap-below'); 157 cellElement.classList.add('console-message-nowrap-below');
158 rowValue[cellProperty.name] = cellElement; 158 rowValue[cellProperty.name] = cellElement;
159 } 159 }
160 } 160 }
161 rows.push([rowProperty.name, rowValue]); 161 rows.push([rowProperty.name, rowValue]);
162 } 162 }
163 163
164 var flatValues = []; 164 var flatValues = [];
165 for (var i = 0; i < rows.length; ++i) { 165 for (var i = 0; i < rows.length; ++i) {
166 var rowName = rows[i][0]; 166 var rowName = rows[i][0];
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 515
516 /** 516 /**
517 * @param {!SDK.RemoteObject} obj 517 * @param {!SDK.RemoteObject} obj
518 * @param {boolean=} includePreview 518 * @param {boolean=} includePreview
519 * @return {!Element} 519 * @return {!Element}
520 */ 520 */
521 _formatParameterAsObject(obj, includePreview) { 521 _formatParameterAsObject(obj, includePreview) {
522 var titleElement = createElement('span'); 522 var titleElement = createElement('span');
523 if (includePreview && obj.preview) { 523 if (includePreview && obj.preview) {
524 titleElement.classList.add('console-object-preview'); 524 titleElement.classList.add('console-object-preview');
525 this._previewFormatter.appendObjectPreview(titleElement, obj.preview); 525 this._previewFormatter.appendObjectPreview(titleElement, obj.preview, obj) ;
526 } else if (obj.type === 'function') { 526 } else if (obj.type === 'function') {
527 Components.ObjectPropertiesSection.formatObjectAsFunction(obj, titleElemen t, false); 527 Components.ObjectPropertiesSection.formatObjectAsFunction(obj, titleElemen t, false);
528 titleElement.classList.add('object-value-function'); 528 titleElement.classList.add('object-value-function');
529 } else { 529 } else {
530 titleElement.createTextChild(obj.description || ''); 530 titleElement.createTextChild(obj.description || '');
531 } 531 }
532 532
533 var section = new Components.ObjectPropertiesSection(obj, titleElement, this ._linkifier); 533 var section = new Components.ObjectPropertiesSection(obj, titleElement, this ._linkifier);
534 section.element.classList.add('console-view-object-properties-section'); 534 section.element.classList.add('console-view-object-properties-section');
535 section.enableContextMenu(); 535 section.enableContextMenu();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 * @param {!SDK.RemoteObject} obj 567 * @param {!SDK.RemoteObject} obj
568 * @param {!Event} event 568 * @param {!Event} event
569 */ 569 */
570 _contextMenuEventFired(obj, event) { 570 _contextMenuEventFired(obj, event) {
571 var contextMenu = new UI.ContextMenu(event); 571 var contextMenu = new UI.ContextMenu(event);
572 contextMenu.appendApplicableItems(obj); 572 contextMenu.appendApplicableItems(obj);
573 contextMenu.show(); 573 contextMenu.show();
574 } 574 }
575 575
576 /** 576 /**
577 * @param {?SDK.RemoteObject} object
578 * @param {!Array.<!Protocol.Runtime.PropertyPreview>} propertyPath
579 * @return {!Element}
580 */
581 _renderPropertyPreviewOrAccessor(object, propertyPath) {
582 var property = propertyPath.peekLast();
583 if (property.type === 'accessor')
584 return this._formatAsAccessorProperty(object, propertyPath.map(property => property.name), false);
585 return this._previewFormatter.renderPropertyPreview(
586 property.type, /** @type {string} */ (property.subtype), property.value) ;
587 }
588
589 /**
590 * @param {!SDK.RemoteObject} object 577 * @param {!SDK.RemoteObject} object
591 * @return {!Element} 578 * @return {!Element}
592 */ 579 */
593 _formatParameterAsNode(object) { 580 _formatParameterAsNode(object) {
594 var result = createElement('span'); 581 var result = createElement('span');
595 Common.Renderer.renderPromise(object).then(appendRenderer.bind(this), failed ToRender.bind(this)); 582 Common.Renderer.renderPromise(object).then(appendRenderer.bind(this), failed ToRender.bind(this));
596 return result; 583 return result;
597 584
598 /** 585 /**
599 * @param {!Element} rendererElement 586 * @param {!Element} rendererElement
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 return; 626 return;
640 } 627 }
641 628
642 var titleElement = createElement('span'); 629 var titleElement = createElement('span');
643 var elements = {}; 630 var elements = {};
644 for (var i = 0; i < properties.length; ++i) { 631 for (var i = 0; i < properties.length; ++i) {
645 var property = properties[i]; 632 var property = properties[i];
646 var name = property.name; 633 var name = property.name;
647 if (isNaN(name)) 634 if (isNaN(name))
648 continue; 635 continue;
649 if (property.getter) 636 var formatter = this._previewFormatter;
650 elements[name] = this._formatAsAccessorProperty(array, [name], true); 637 if (property.getter) {
651 else if (property.value) 638 elements[name] = formatter.formatAsAccessorProperty([name], array);
652 elements[name] = this._formatAsArrayEntry(property.value); 639 } else if (property.value) {
640 var output = property.value;
641 elements[name] = formatter.renderPropertyPreview(output.type, output.s ubtype, output.description);
642 }
653 } 643 }
654 644
655 titleElement.createTextChild('['); 645 titleElement.createTextChild('[');
656 var lastNonEmptyIndex = -1; 646 var lastNonEmptyIndex = -1;
657 647
658 function appendUndefined(titleElement, index) { 648 function appendUndefined(titleElement, index) {
659 if (index - lastNonEmptyIndex <= 1) 649 if (index - lastNonEmptyIndex <= 1)
660 return; 650 return;
661 var span = titleElement.createChild('span', 'object-value-undefined'); 651 var span = titleElement.createChild('span', 'object-value-undefined');
662 span.textContent = Common.UIString('undefined × %d', index - lastNonEmpt yIndex - 1); 652 span.textContent = Common.UIString('undefined × %d', index - lastNonEmpt yIndex - 1);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
709 * @return {!Element} 699 * @return {!Element}
710 */ 700 */
711 _formatParameterAsError(output) { 701 _formatParameterAsError(output) {
712 var result = createElement('span'); 702 var result = createElement('span');
713 var errorSpan = this._tryFormatAsError(output.description || ''); 703 var errorSpan = this._tryFormatAsError(output.description || '');
714 result.appendChild(errorSpan ? errorSpan : Components.linkifyStringAsFragmen t(output.description || '')); 704 result.appendChild(errorSpan ? errorSpan : Components.linkifyStringAsFragmen t(output.description || ''));
715 return result; 705 return result;
716 } 706 }
717 707
718 /** 708 /**
719 * @param {!SDK.RemoteObject} output
720 * @return {!Element}
721 */
722 _formatAsArrayEntry(output) {
723 return this._previewFormatter.renderPropertyPreview(output.type, output.subt ype, output.description);
724 }
725
726 /**
727 * @param {?SDK.RemoteObject} object
728 * @param {!Array.<string>} propertyPath
729 * @param {boolean} isArrayEntry
730 * @return {!Element}
731 */
732 _formatAsAccessorProperty(object, propertyPath, isArrayEntry) {
733 var rootElement = Components.ObjectPropertyTreeElement.createRemoteObjectAcc essorPropertySpan(
734 object, propertyPath, onInvokeGetterClick.bind(this));
735
736 /**
737 * @param {?SDK.RemoteObject} result
738 * @param {boolean=} wasThrown
739 * @this {Console.ConsoleViewMessage}
740 */
741 function onInvokeGetterClick(result, wasThrown) {
742 if (!result)
743 return;
744 rootElement.removeChildren();
745 if (wasThrown) {
746 var element = rootElement.createChild('span');
747 element.textContent = Common.UIString('<exception>');
748 element.title = /** @type {string} */ (result.description);
749 } else if (isArrayEntry) {
750 rootElement.appendChild(this._formatAsArrayEntry(result));
751 } else {
752 // Make a PropertyPreview from the RemoteObject similar to the backend l ogic.
753 const maxLength = 100;
754 var type = result.type;
755 var subtype = result.subtype;
756 var description = '';
757 if (type !== 'function' && result.description) {
758 if (type === 'string' || subtype === 'regexp')
759 description = result.description.trimMiddle(maxLength);
760 else
761 description = result.description.trimEnd(maxLength);
762 }
763 rootElement.appendChild(this._previewFormatter.renderPropertyPreview(typ e, subtype, description));
764 }
765 }
766
767 return rootElement;
768 }
769
770 /**
771 * @param {string} format 709 * @param {string} format
772 * @param {!Array.<!SDK.RemoteObject>} parameters 710 * @param {!Array.<!SDK.RemoteObject>} parameters
773 * @param {!Element} formattedResult 711 * @param {!Element} formattedResult
774 */ 712 */
775 _formatWithSubstitutionString(format, parameters, formattedResult) { 713 _formatWithSubstitutionString(format, parameters, formattedResult) {
776 var formatters = {}; 714 var formatters = {};
777 715
778 /** 716 /**
779 * @param {boolean} force 717 * @param {boolean} force
780 * @param {!SDK.RemoteObject} obj 718 * @param {!SDK.RemoteObject} obj
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
1234 * @return {!Element} 1172 * @return {!Element}
1235 */ 1173 */
1236 toMessageElement() { 1174 toMessageElement() {
1237 if (!this._element) { 1175 if (!this._element) {
1238 super.toMessageElement(); 1176 super.toMessageElement();
1239 this._element.classList.toggle('collapsed', this._collapsed); 1177 this._element.classList.toggle('collapsed', this._collapsed);
1240 } 1178 }
1241 return this._element; 1179 return this._element;
1242 } 1180 }
1243 }; 1181 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698