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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/components/RemoteObjectPreviewFormatter.js

Issue 2012033002: DevTools: more previews when formatting logged arrays/objects (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code cleanup Created 4 years, 6 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
OLDNEW
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @constructor 6 * @constructor
7 */ 7 */
8 WebInspector.RemoteObjectPreviewFormatter = function() 8 WebInspector.RemoteObjectPreviewFormatter = function()
9 { 9 {
10 } 10 }
11 11
12 WebInspector.RemoteObjectPreviewFormatter.prototype = { 12 WebInspector.RemoteObjectPreviewFormatter.prototype = {
13 /** 13 /**
14 * @param {!Element} parentElement 14 * @param {!Element} parentElement
15 * @param {!RuntimeAgent.ObjectPreview} preview 15 * @param {!RuntimeAgent.ObjectPreview} preview
16 * @param {boolean=} noHeading
16 */ 17 */
17 appendObjectPreview: function(parentElement, preview) 18 appendObjectPreview: function(parentElement, preview, noHeading)
18 { 19 {
19 var description = preview.description; 20 var description = preview.description;
20 if (preview.type !== "object" || preview.subtype === "null") { 21 if (!noHeading && (preview.type !== "object" || preview.subtype === "nul l")) {
21 parentElement.appendChild(this.renderPropertyPreview(preview.type, p review.subtype, description)); 22 parentElement.appendChild(this.renderPropertyPreview(preview.type, p review.subtype, description));
22 return; 23 return;
23 } 24 }
24 if (description && preview.subtype !== "array") { 25 if (!noHeading && description && preview.subtype !== "array") {
25 var text = preview.subtype ? description : this._abbreviateFullQuali fiedClassName(description); 26 var text = preview.subtype ? description : this._abbreviateFullQuali fiedClassName(description);
26 parentElement.createTextChildren(text, " "); 27 parentElement.createTextChildren(text, " ");
27 } 28 }
29
28 if (preview.entries) 30 if (preview.entries)
29 this._appendEntriesPreview(parentElement, preview); 31 this._appendEntriesPreview(parentElement, preview);
30 else 32 else
31 this._appendPropertiesPreview(parentElement, preview); 33 this._appendPropertiesPreview(parentElement, preview);
32 }, 34 },
33 35
34 /** 36 /**
35 * @param {string} description 37 * @param {string} description
36 * @return {string} 38 * @return {string}
37 */ 39 */
38 _abbreviateFullQualifiedClassName: function(description) 40 _abbreviateFullQualifiedClassName: function(description)
39 { 41 {
40 var abbreviatedDescription = description.split("."); 42 var abbreviatedDescription = description.split(".");
41 for (var i = 0; i < abbreviatedDescription.length - 1; ++i) 43 for (var i = 0; i < abbreviatedDescription.length - 1; ++i)
42 abbreviatedDescription[i] = abbreviatedDescription[i].trimMiddle(3); 44 abbreviatedDescription[i] = abbreviatedDescription[i].trimMiddle(3);
43 return abbreviatedDescription.join("."); 45 return abbreviatedDescription.join(".");
44 }, 46 },
45 47
46 /** 48 /**
47 * @param {!Element} parentElement 49 * @param {!Element} parentElement
48 * @param {!RuntimeAgent.ObjectPreview} preview 50 * @param {!RuntimeAgent.ObjectPreview} preview
51 * @param {number=} propertiesCharacterThreshold
49 */ 52 */
50 _appendPropertiesPreview: function(parentElement, preview) 53 _appendPropertiesPreview: function(parentElement, preview, propertiesCharact erThreshold)
51 { 54 {
55 propertiesCharacterThreshold = propertiesCharacterThreshold || 120;
52 var isArray = preview.subtype === "array"; 56 var isArray = preview.subtype === "array";
53 var arrayLength = WebInspector.RemoteObject.arrayLength(preview); 57 var arrayLength = WebInspector.RemoteObject.arrayLength(preview);
54 var properties = preview.properties; 58 var properties = preview.properties;
55 if (isArray) 59 if (isArray)
56 properties = properties.slice().stableSort(compareIndexesFirst); 60 properties = properties.slice().stableSort(compareIndexesFirst);
57 61
58 /** 62 /**
59 * @param {!RuntimeAgent.PropertyPreview} a 63 * @param {!RuntimeAgent.PropertyPreview} a
60 * @param {!RuntimeAgent.PropertyPreview} b 64 * @param {!RuntimeAgent.PropertyPreview} b
61 */ 65 */
(...skipping 13 matching lines...) Expand all
75 function toArrayIndex(name) 79 function toArrayIndex(name)
76 { 80 {
77 var index = name >>> 0; 81 var index = name >>> 0;
78 if (String(index) === name && index < arrayLength) 82 if (String(index) === name && index < arrayLength)
79 return index; 83 return index;
80 return -1; 84 return -1;
81 } 85 }
82 86
83 parentElement.createTextChild(isArray ? "[" : "{"); 87 parentElement.createTextChild(isArray ? "[" : "{");
84 for (var i = 0; i < properties.length; ++i) { 88 for (var i = 0; i < properties.length; ++i) {
85 if (i > 0) 89 if (i > 0) {
86 parentElement.createTextChild(", "); 90 parentElement.createTextChild(", ");
91 propertiesCharacterThreshold -= ", ".length;
92 }
87 93
88 var property = properties[i]; 94 var property = properties[i];
89 var name = property.name; 95 var name = property.name;
90 if (!isArray || name !== String(i) || i >= arrayLength) { 96 if (!isArray || name !== String(i) || i >= arrayLength) {
97 var nameElement = parentElement.createChild("span", "name");
91 if (/^\s|\s$|^$|\n/.test(name)) 98 if (/^\s|\s$|^$|\n/.test(name))
92 parentElement.createChild("span", "name").createTextChildren ("\"", name.replace(/\n/g, "\u21B5"), "\""); 99 nameElement.createTextChildren("\"", name.replace(/\n/g, "\u 21B5"), "\"");
93 else 100 else
94 parentElement.createChild("span", "name").textContent = name ; 101 nameElement.textContent = name;
95 parentElement.createTextChild(": "); 102 parentElement.createTextChild(": ");
103 propertiesCharacterThreshold -= (nameElement.textContent.length + ": ".length);
96 } 104 }
97 105
98 parentElement.appendChild(this._renderPropertyPreviewOrAccessor([pro perty])); 106 var propertyPreviewElement = this._renderPropertyPreviewOrAccessor([ property], propertiesCharacterThreshold);
107 parentElement.appendChild(propertyPreviewElement);
108 propertiesCharacterThreshold -= propertyPreviewElement.textContent.l ength;
109 if (propertiesCharacterThreshold < 0)
110 break;
99 } 111 }
100 if (preview.overflow) 112 if (i + 1 !== properties.length && (preview.overflow || propertiesCharac terThreshold < 0))
101 parentElement.createChild("span").textContent = "\u2026"; 113 parentElement.createChild("span").textContent = ", \u2026";
102 parentElement.createTextChild(isArray ? "]" : "}"); 114 parentElement.createTextChild(isArray ? "]" : "}");
103 }, 115 },
104 116
105 117
106 /** 118 /**
107 * @param {!Element} parentElement 119 * @param {!Element} parentElement
108 * @param {!RuntimeAgent.ObjectPreview} preview 120 * @param {!RuntimeAgent.ObjectPreview} preview
109 */ 121 */
110 _appendEntriesPreview: function(parentElement, preview) 122 _appendEntriesPreview: function(parentElement, preview)
111 { 123 {
112 parentElement.createTextChild("{"); 124 parentElement.createTextChild("{");
113 for (var i = 0; i < preview.entries.length; ++i) { 125 for (var i = 0; i < preview.entries.length; ++i) {
114 if (i > 0) 126 if (i > 0)
115 parentElement.createTextChild(", "); 127 parentElement.createTextChild(", ");
116 128
117 var entry = preview.entries[i]; 129 var entry = preview.entries[i];
118 if (entry.key) { 130 if (entry.key) {
119 this.appendObjectPreview(parentElement, entry.key); 131 this.appendObjectPreview(parentElement, entry.key);
120 parentElement.createTextChild(" => "); 132 parentElement.createTextChild(" => ");
121 } 133 }
122 this.appendObjectPreview(parentElement, entry.value); 134 this.appendObjectPreview(parentElement, entry.value);
123 } 135 }
124 if (preview.overflow) 136 if (preview.overflow)
125 parentElement.createChild("span").textContent = "\u2026"; 137 parentElement.createChild("span").textContent = ", \u2026";
126 parentElement.createTextChild("}"); 138 parentElement.createTextChild("}");
127 }, 139 },
128 140
129 141
130 /** 142 /**
131 * @param {!Array.<!RuntimeAgent.PropertyPreview>} propertyPath 143 * @param {!Array.<!RuntimeAgent.PropertyPreview>} propertyPath
144 * @param {number=} propertiesCharacterThreshold
132 * @return {!Element} 145 * @return {!Element}
133 */ 146 */
134 _renderPropertyPreviewOrAccessor: function(propertyPath) 147 _renderPropertyPreviewOrAccessor: function(propertyPath, propertiesCharacter Threshold)
135 { 148 {
136 var property = propertyPath.peekLast(); 149 var property = propertyPath.peekLast();
137 return this.renderPropertyPreview(property.type, /** @type {string} */ ( property.subtype), property.value); 150 if (property.valuePreview && property.valuePreview.description && proper ty.subtype === "array") {
151 return this.renderPropertyPreview(property.type, /** @type {string} */ (property.subtype), property.valuePreview.description);
152 } else if (property.valuePreview) {
153 var span = createElementWithClass("span", "object-value-" + (propert y.subtype || property.type));
154 this._appendPropertiesPreview(span, property.valuePreview, propertie sCharacterThreshold);
155 return span;
156 } else {
157 return this.renderPropertyPreview(property.type, /** @type {string} */ (property.subtype), property.value);
158 }
138 }, 159 },
139 160
140 /** 161 /**
141 * @param {string} type 162 * @param {string} type
142 * @param {string=} subtype 163 * @param {string=} subtype
143 * @param {string=} description 164 * @param {string=} description
144 * @return {!Element} 165 * @return {!Element}
145 */ 166 */
146 renderPropertyPreview: function(type, subtype, description) 167 renderPropertyPreview: function(type, subtype, description)
147 { 168 {
(...skipping 18 matching lines...) Expand all
166 187
167 if (type === "object" && !subtype) { 188 if (type === "object" && !subtype) {
168 span.textContent = this._abbreviateFullQualifiedClassName(descriptio n); 189 span.textContent = this._abbreviateFullQualifiedClassName(descriptio n);
169 return span; 190 return span;
170 } 191 }
171 192
172 span.textContent = description; 193 span.textContent = description;
173 return span; 194 return span;
174 } 195 }
175 } 196 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698