| Index: third_party/WebKit/Source/devtools/front_end/components/RemoteObjectPreviewFormatter.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/components/RemoteObjectPreviewFormatter.js b/third_party/WebKit/Source/devtools/front_end/components/RemoteObjectPreviewFormatter.js
|
| index 40c57590953542fb5f39dbb1c92aae913e42ddd1..d699ac7ab4ae2f8344bf17043dd920dd55d44fdf 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/components/RemoteObjectPreviewFormatter.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/components/RemoteObjectPreviewFormatter.js
|
| @@ -16,14 +16,22 @@ Components.RemoteObjectPreviewFormatter = class {
|
| parentElement.appendChild(this.renderPropertyPreview(preview.type, preview.subtype, description));
|
| return;
|
| }
|
| - if (description && preview.subtype !== 'array' && preview.subtype !== 'typedarray') {
|
| + var isArray = preview.subtype === 'array' || preview.subtype === 'typedarray';
|
| + if (description && !isArray) {
|
| var text = preview.subtype ? description : this._abbreviateFullQualifiedClassName(description);
|
| parentElement.createTextChildren(text, ' ');
|
| }
|
| +
|
| + parentElement.createTextChild(isArray ? '[' : '{');
|
| if (preview.entries)
|
| this._appendEntriesPreview(parentElement, preview);
|
| + else if (isArray)
|
| + this._appendArrayPropertiesPreview(parentElement, preview, objectForAccessing);
|
| else
|
| this._appendPropertiesPreview(parentElement, preview, objectForAccessing);
|
| + if (preview.overflow)
|
| + parentElement.createChild('span').textContent = '\u2026';
|
| + parentElement.createTextChild(isArray ? ']' : '}');
|
| }
|
|
|
| /**
|
| @@ -43,13 +51,7 @@ Components.RemoteObjectPreviewFormatter = class {
|
| * @param {!SDK.RemoteObject=} objectForAccessing
|
| */
|
| _appendPropertiesPreview(parentElement, preview, objectForAccessing) {
|
| - var isArray = preview.subtype === 'array' || preview.subtype === 'typedarray';
|
| - var arrayLength = SDK.RemoteObject.arrayLength(preview);
|
| - var properties = preview.properties;
|
| - if (isArray)
|
| - properties = properties.slice().stableSort(compareIndexesFirst);
|
| - else
|
| - properties = properties.slice().stableSort(compareFunctionsLast);
|
| + var properties = preview.properties.slice().stableSort(compareFunctionsLast);
|
|
|
| /**
|
| * @param {!Protocol.Runtime.PropertyPreview} a
|
| @@ -63,6 +65,59 @@ Components.RemoteObjectPreviewFormatter = class {
|
| return 0;
|
| }
|
|
|
| + for (var i = 0; i < properties.length; ++i) {
|
| + if (i > 0)
|
| + parentElement.createTextChild(', ');
|
| +
|
| + var property = properties[i];
|
| + var name = property.name;
|
| + if (/^\s|\s$|^$|\n/.test(name))
|
| + parentElement.createChild('span', 'name').createTextChildren('"', name.replace(/\n/g, '\u21B5'), '"');
|
| + else
|
| + parentElement.createChild('span', 'name').textContent = name;
|
| + parentElement.createTextChild(': ');
|
| + parentElement.appendChild(this.renderPropertyPreviewOrAccessor([property], objectForAccessing));
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @param {!Element} parentElement
|
| + * @param {!Protocol.Runtime.ObjectPreview} preview
|
| + * @param {!SDK.RemoteObject=} objectForAccessing
|
| + */
|
| + _appendArrayPropertiesPreview(parentElement, preview, objectForAccessing) {
|
| + var arrayLength = SDK.RemoteObject.arrayLength(preview);
|
| + var properties = preview.properties.slice().stableSort(compareIndexesFirst);
|
| + var lastNonEmptyArrayIndex = -1;
|
| + for (var i = 0; i < properties.length; ++i) {
|
| + var property = properties[i];
|
| + var name = property.name;
|
| + if (isNaN(name))
|
| + continue;
|
| + if (i > 0)
|
| + parentElement.createTextChild(', ');
|
| + var index = parseInt(name, 10);
|
| + if (index - lastNonEmptyArrayIndex > 1) {
|
| + appendUndefined(index);
|
| + parentElement.createTextChild(', ');
|
| + }
|
| + parentElement.appendChild(this.renderPropertyPreviewOrAccessor([property], objectForAccessing));
|
| + lastNonEmptyArrayIndex = index;
|
| + }
|
| + if (lastNonEmptyArrayIndex > -1 && arrayLength - lastNonEmptyArrayIndex > 1) {
|
| + parentElement.createTextChild(', ');
|
| + appendUndefined(arrayLength);
|
| + }
|
| +
|
| + /**
|
| + * @param {number} index
|
| + */
|
| + function appendUndefined(index) {
|
| + var span = parentElement.createChild('span', 'object-value-undefined');
|
| + var gapSize = index - lastNonEmptyArrayIndex - 1;
|
| + span.textContent = gapSize > 1 ? Common.UIString('undefined × %d', gapSize) : Common.UIString('undefined');
|
| + }
|
| +
|
| /**
|
| * @param {!Protocol.Runtime.PropertyPreview} a
|
| * @param {!Protocol.Runtime.PropertyPreview} b
|
| @@ -85,27 +140,6 @@ Components.RemoteObjectPreviewFormatter = class {
|
| return index;
|
| return -1;
|
| }
|
| -
|
| - parentElement.createTextChild(isArray ? '[' : '{');
|
| - for (var i = 0; i < properties.length; ++i) {
|
| - if (i > 0)
|
| - parentElement.createTextChild(', ');
|
| -
|
| - var property = properties[i];
|
| - var name = property.name;
|
| - if (!isArray || name !== String(i) || i >= arrayLength) {
|
| - if (/^\s|\s$|^$|\n/.test(name))
|
| - parentElement.createChild('span', 'name').createTextChildren('"', name.replace(/\n/g, '\u21B5'), '"');
|
| - else
|
| - parentElement.createChild('span', 'name').textContent = name;
|
| - parentElement.createTextChild(': ');
|
| - }
|
| -
|
| - parentElement.appendChild(this.renderPropertyPreviewOrAccessor([property], objectForAccessing));
|
| - }
|
| - if (preview.overflow)
|
| - parentElement.createChild('span').textContent = '\u2026';
|
| - parentElement.createTextChild(isArray ? ']' : '}');
|
| }
|
|
|
| /**
|
| @@ -113,7 +147,6 @@ Components.RemoteObjectPreviewFormatter = class {
|
| * @param {!Protocol.Runtime.ObjectPreview} preview
|
| */
|
| _appendEntriesPreview(parentElement, preview) {
|
| - parentElement.createTextChild('{');
|
| for (var i = 0; i < preview.entries.length; ++i) {
|
| if (i > 0)
|
| parentElement.createTextChild(', ');
|
| @@ -125,9 +158,6 @@ Components.RemoteObjectPreviewFormatter = class {
|
| }
|
| this.appendObjectPreview(parentElement, entry.value);
|
| }
|
| - if (preview.overflow)
|
| - parentElement.createChild('span').textContent = '\u2026';
|
| - parentElement.createTextChild('}');
|
| }
|
|
|
| /**
|
|
|