OLD | NEW |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |