| Index: third_party/WebKit/Source/devtools/front_end/components/ObjectPropertiesSection.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/components/ObjectPropertiesSection.js b/third_party/WebKit/Source/devtools/front_end/components/ObjectPropertiesSection.js
|
| index c6004774e827151d3e0f9d7e3c6c7be3ff558cfa..21f0f9756b13289e5e1b850ea0b01415ea575242 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/components/ObjectPropertiesSection.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/components/ObjectPropertiesSection.js
|
| @@ -137,7 +137,7 @@ Components.ObjectPropertiesSection = class extends UI.TreeOutlineInShadow {
|
| */
|
| static valueElementForFunctionDescription(description, includePreview, defaultName) {
|
| var valueElement = createElementWithClass('span', 'object-value-function');
|
| - var text = description.replace(/^function [gs]et /, 'function ');
|
| + var text = description ? description.replace(/^function [gs]et /, 'function ') : '';
|
| defaultName = defaultName || '';
|
|
|
| // This set of best-effort regular expressions captures common function descriptions.
|
| @@ -181,6 +181,7 @@ Components.ObjectPropertiesSection = class extends UI.TreeOutlineInShadow {
|
| } else {
|
| addElements('function', text, nameAndArguments(text));
|
| }
|
| + valueElement.title = description || '';
|
| return valueElement;
|
|
|
| /**
|
| @@ -238,84 +239,91 @@ Components.ObjectPropertiesSection = class extends UI.TreeOutlineInShadow {
|
| * @return {!Element}
|
| */
|
| static createValueElement(value, wasThrown, parentElement, linkifier) {
|
| - var valueElement = createElementWithClass('span', 'value');
|
| + var valueElement;
|
| var type = value.type;
|
| var subtype = value.subtype;
|
| var description = value.description;
|
| - var prefix;
|
| - var valueText;
|
| - var suffix;
|
| - if (wasThrown) {
|
| - prefix = '[Exception: ';
|
| - valueText = description;
|
| - suffix = ']';
|
| + if (type === 'object' && subtype === 'internal#location') {
|
| + var rawLocation = value.debuggerModel().createRawLocationByScriptId(
|
| + value.value.scriptId, value.value.lineNumber, value.value.columnNumber);
|
| + if (rawLocation && linkifier)
|
| + return linkifier.linkifyRawLocation(rawLocation, '');
|
| + valueElement = createUnknownInternalLocationElement();
|
| } else if (type === 'string' && typeof description === 'string') {
|
| - // Render \n as a nice unicode cr symbol.
|
| - prefix = '"';
|
| - valueText = description.replace(/\n/g, '\u21B5');
|
| - suffix = '"';
|
| - } else if (type !== 'object' || subtype !== 'node') {
|
| - valueText = description;
|
| - }
|
| -
|
| - if (type === 'function') {
|
| + valueElement = createStringElement();
|
| + } else if (type === 'function') {
|
| valueElement = Components.ObjectPropertiesSection.valueElementForFunctionDescription(description);
|
| - } else if (type !== 'number' || valueText.indexOf('e') === -1) {
|
| - valueElement.setTextContentTruncatedIfNeeded(valueText || '');
|
| - if (prefix)
|
| - valueElement.insertBefore(createTextNode(prefix), valueElement.firstChild);
|
| - if (suffix)
|
| - valueElement.createTextChild(suffix);
|
| - } else {
|
| - var numberParts = valueText.split('e');
|
| - var mantissa = valueElement.createChild('span', 'object-value-scientific-notation-mantissa');
|
| - mantissa.textContent = numberParts[0];
|
| - var exponent = valueElement.createChild('span', 'object-value-scientific-notation-exponent');
|
| - exponent.textContent = 'e' + numberParts[1];
|
| - valueElement.classList.add('object-value-scientific-notation-number');
|
| + } else if (type === 'object' && subtype === 'node' && description) {
|
| + valueElement = createNodeElement();
|
| + } else if (type === 'number' && description && description.indexOf('e') !== -1) {
|
| + valueElement = createNumberWithExponentElement();
|
| if (parentElement) // FIXME: do it in the caller.
|
| parentElement.classList.add('hbox');
|
| - }
|
| -
|
| - if (wasThrown)
|
| - valueElement.classList.add('error');
|
| - if (subtype || type)
|
| - valueElement.classList.add('object-value-' + (subtype || type));
|
| -
|
| - if (type === 'object' && subtype === 'node' && description) {
|
| - Components.DOMPresentationUtils.createSpansForNodeTitle(valueElement, description);
|
| - valueElement.addEventListener('click', mouseClick, false);
|
| - valueElement.addEventListener('mousemove', mouseMove, false);
|
| - valueElement.addEventListener('mouseleave', mouseLeave, false);
|
| } else {
|
| + valueElement = createElementWithClass('span', 'object-value-' + (subtype || type));
|
| + valueElement.setTextContentTruncatedIfNeeded(description);
|
| valueElement.title = description || '';
|
| }
|
|
|
| - if (type === 'object' && subtype === 'internal#location') {
|
| - var rawLocation = value.debuggerModel().createRawLocationByScriptId(
|
| - value.value.scriptId, value.value.lineNumber, value.value.columnNumber);
|
| - if (rawLocation && linkifier)
|
| - return linkifier.linkifyRawLocation(rawLocation, '');
|
| - valueElement.textContent = '<unknown>';
|
| + if (wasThrown) {
|
| + var wrapperElement = createElementWithClass('span', 'error value');
|
| + wrapperElement.createTextChild('[' + Common.UIString('Exception') + ': ');
|
| + wrapperElement.appendChild(valueElement);
|
| + wrapperElement.createTextChild(']');
|
| + return wrapperElement;
|
| }
|
| + valueElement.classList.add('value');
|
| + return valueElement;
|
|
|
| - function mouseMove() {
|
| - SDK.DOMModel.highlightObjectAsDOMNode(value);
|
| + /**
|
| + * @return {!Element}
|
| + */
|
| + function createUnknownInternalLocationElement() {
|
| + var valueElement = createElementWithClass('span');
|
| + valueElement.textContent = '<' + Common.UIString('unknown') + '>';
|
| + valueElement.title = description || '';
|
| + return valueElement;
|
| }
|
|
|
| - function mouseLeave() {
|
| - SDK.DOMModel.hideDOMNodeHighlight();
|
| + /**
|
| + * @return {!Element}
|
| + */
|
| + function createStringElement() {
|
| + var valueElement = createElementWithClass('span', 'object-value-string');
|
| + valueElement.createChild('span', 'object-value-string-quote').textContent = '"';
|
| + valueElement.createTextChild('').setTextContentTruncatedIfNeeded(description.replace(/\n/g, '\u21B5'));
|
| + valueElement.createChild('span', 'object-value-string-quote').textContent = '"';
|
| + valueElement.title = description || '';
|
| + return valueElement;
|
| }
|
|
|
| /**
|
| - * @param {!Event} event
|
| + * @return {!Element}
|
| */
|
| - function mouseClick(event) {
|
| - Common.Revealer.reveal(value);
|
| - event.consume(true);
|
| + function createNodeElement() {
|
| + var valueElement = createElementWithClass('span', 'object-value-node');
|
| + Components.DOMPresentationUtils.createSpansForNodeTitle(valueElement, /** @type {string} */ (description));
|
| + valueElement.addEventListener('click', event => {
|
| + Common.Revealer.reveal(value);
|
| + event.consume(true);
|
| + }, false);
|
| + valueElement.addEventListener('mousemove', () => SDK.DOMModel.highlightObjectAsDOMNode(value), false);
|
| + valueElement.addEventListener('mouseleave', () => SDK.DOMModel.hideDOMNodeHighlight(), false);
|
| + return valueElement;
|
| }
|
|
|
| - return valueElement;
|
| + /**
|
| + * @return {!Element}
|
| + */
|
| + function createNumberWithExponentElement() {
|
| + var valueElement = createElementWithClass('span', 'object-value-number');
|
| + var numberParts = description.split('e');
|
| + valueElement.createChild('span', 'object-value-scientific-notation-mantissa').textContent = numberParts[0];
|
| + valueElement.createChild('span', 'object-value-scientific-notation-exponent').textContent = 'e' + numberParts[1];
|
| + valueElement.classList.add('object-value-scientific-notation-number');
|
| + valueElement.title = description || '';
|
| + return valueElement;
|
| + }
|
| }
|
|
|
| /**
|
|
|