| 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 |