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

Unified Diff: third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js

Issue 2466123002: DevTools: reformat front-end code to match chromium style. (Closed)
Patch Set: all done Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js
diff --git a/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js b/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js
index 8c254697333d46aecca7c3b30001764b04e7fbe5..a3df7117d2d7faddee6c0afc3ba0a8e3bd2a5c07 100644
--- a/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js
+++ b/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js
@@ -27,16 +27,17 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
/**
- * @constructor
* @implements {WebInspector.ViewportElement}
- * @param {!WebInspector.ConsoleMessage} consoleMessage
- * @param {!WebInspector.Linkifier} linkifier
- * @param {number} nestingLevel
+ * @unrestricted
*/
-WebInspector.ConsoleViewMessage = function(consoleMessage, linkifier, nestingLevel)
-{
+WebInspector.ConsoleViewMessage = class {
+ /**
+ * @param {!WebInspector.ConsoleMessage} consoleMessage
+ * @param {!WebInspector.Linkifier} linkifier
+ * @param {number} nestingLevel
+ */
+ constructor(consoleMessage, linkifier, nestingLevel) {
this._message = consoleMessage;
this._linkifier = linkifier;
this._repeatCount = 1;
@@ -47,1231 +48,1193 @@ WebInspector.ConsoleViewMessage = function(consoleMessage, linkifier, nestingLev
this._dataGrid = null;
this._previewFormatter = new WebInspector.RemoteObjectPreviewFormatter();
this._searchRegex = null;
-};
-
-WebInspector.ConsoleViewMessage.prototype = {
- /**
- * @return {?WebInspector.Target}
- */
- _target: function()
- {
- return this.consoleMessage().target();
- },
-
- /**
- * @override
- * @return {!Element}
- */
- element: function()
- {
- return this.toMessageElement();
- },
-
- /**
- * @override
- */
- wasShown: function()
- {
- if (this._dataGrid)
- this._dataGrid.updateWidths();
- this._isVisible = true;
- },
-
- onResize: function()
- {
- if (!this._isVisible)
- return;
- if (this._dataGrid)
- this._dataGrid.onResize();
- },
-
- /**
- * @override
- */
- willHide: function()
- {
- this._isVisible = false;
- this._cachedHeight = this.contentElement().offsetHeight;
- },
-
- /**
- * @return {number}
- */
- fastHeight: function()
- {
- if (this._cachedHeight)
- return this._cachedHeight;
- // This value reflects the 18px min-height of .console-message, plus the
- // 1px border of .console-message-wrapper. Keep in sync with consoleView.css.
- const defaultConsoleRowHeight = 19;
- if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table) {
- var table = this._message.parameters[0];
- if (table && table.preview)
- return defaultConsoleRowHeight * table.preview.properties.length;
- }
- return defaultConsoleRowHeight;
- },
-
- /**
- * @return {!WebInspector.ConsoleMessage}
- */
- consoleMessage: function()
- {
- return this._message;
- },
-
- /**
- * @param {!WebInspector.ConsoleMessage} consoleMessage
- * @return {!Element}
- */
- _buildTableMessage: function(consoleMessage)
- {
- var formattedMessage = createElement("span");
- WebInspector.appendStyle(formattedMessage, "components/objectValue.css");
- formattedMessage.className = "console-message-text source-code";
- var anchorElement = this._buildMessageAnchor(consoleMessage);
- if (anchorElement)
- formattedMessage.appendChild(anchorElement);
-
- var table = consoleMessage.parameters && consoleMessage.parameters.length ? consoleMessage.parameters[0] : null;
- if (table)
- table = this._parameterToRemoteObject(table, this._target());
- if (!table || !table.preview)
- return formattedMessage;
-
- var columnNames = [];
- var preview = table.preview;
- var rows = [];
- for (var i = 0; i < preview.properties.length; ++i) {
- var rowProperty = preview.properties[i];
- var rowPreview = rowProperty.valuePreview;
- if (!rowPreview)
- continue;
-
- var rowValue = {};
- const maxColumnsToRender = 20;
- for (var j = 0; j < rowPreview.properties.length; ++j) {
- var cellProperty = rowPreview.properties[j];
- var columnRendered = columnNames.indexOf(cellProperty.name) !== -1;
- if (!columnRendered) {
- if (columnNames.length === maxColumnsToRender)
- continue;
- columnRendered = true;
- columnNames.push(cellProperty.name);
- }
-
- if (columnRendered) {
- var cellElement = this._renderPropertyPreviewOrAccessor(table, [rowProperty, cellProperty]);
- cellElement.classList.add("console-message-nowrap-below");
- rowValue[cellProperty.name] = cellElement;
- }
- }
- rows.push([rowProperty.name, rowValue]);
+ }
+
+ /**
+ * @return {?WebInspector.Target}
+ */
+ _target() {
+ return this.consoleMessage().target();
+ }
+
+ /**
+ * @override
+ * @return {!Element}
+ */
+ element() {
+ return this.toMessageElement();
+ }
+
+ /**
+ * @override
+ */
+ wasShown() {
+ if (this._dataGrid)
+ this._dataGrid.updateWidths();
+ this._isVisible = true;
+ }
+
+ onResize() {
+ if (!this._isVisible)
+ return;
+ if (this._dataGrid)
+ this._dataGrid.onResize();
+ }
+
+ /**
+ * @override
+ */
+ willHide() {
+ this._isVisible = false;
+ this._cachedHeight = this.contentElement().offsetHeight;
+ }
+
+ /**
+ * @return {number}
+ */
+ fastHeight() {
+ if (this._cachedHeight)
+ return this._cachedHeight;
+ // This value reflects the 18px min-height of .console-message, plus the
+ // 1px border of .console-message-wrapper. Keep in sync with consoleView.css.
+ const defaultConsoleRowHeight = 19;
+ if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table) {
+ var table = this._message.parameters[0];
+ if (table && table.preview)
+ return defaultConsoleRowHeight * table.preview.properties.length;
+ }
+ return defaultConsoleRowHeight;
+ }
+
+ /**
+ * @return {!WebInspector.ConsoleMessage}
+ */
+ consoleMessage() {
+ return this._message;
+ }
+
+ /**
+ * @param {!WebInspector.ConsoleMessage} consoleMessage
+ * @return {!Element}
+ */
+ _buildTableMessage(consoleMessage) {
+ var formattedMessage = createElement('span');
+ WebInspector.appendStyle(formattedMessage, 'components/objectValue.css');
+ formattedMessage.className = 'console-message-text source-code';
+ var anchorElement = this._buildMessageAnchor(consoleMessage);
+ if (anchorElement)
+ formattedMessage.appendChild(anchorElement);
+
+ var table = consoleMessage.parameters && consoleMessage.parameters.length ? consoleMessage.parameters[0] : null;
+ if (table)
+ table = this._parameterToRemoteObject(table, this._target());
+ if (!table || !table.preview)
+ return formattedMessage;
+
+ var columnNames = [];
+ var preview = table.preview;
+ var rows = [];
+ for (var i = 0; i < preview.properties.length; ++i) {
+ var rowProperty = preview.properties[i];
+ var rowPreview = rowProperty.valuePreview;
+ if (!rowPreview)
+ continue;
+
+ var rowValue = {};
+ const maxColumnsToRender = 20;
+ for (var j = 0; j < rowPreview.properties.length; ++j) {
+ var cellProperty = rowPreview.properties[j];
+ var columnRendered = columnNames.indexOf(cellProperty.name) !== -1;
+ if (!columnRendered) {
+ if (columnNames.length === maxColumnsToRender)
+ continue;
+ columnRendered = true;
+ columnNames.push(cellProperty.name);
}
- var flatValues = [];
- for (var i = 0; i < rows.length; ++i) {
- var rowName = rows[i][0];
- var rowValue = rows[i][1];
- flatValues.push(rowName);
- for (var j = 0; j < columnNames.length; ++j)
- flatValues.push(rowValue[columnNames[j]]);
- }
- columnNames.unshift(WebInspector.UIString("(index)"));
-
- if (flatValues.length) {
- this._dataGrid = WebInspector.SortableDataGrid.create(columnNames, flatValues);
-
- var formattedResult = createElement("span");
- var tableElement = formattedResult.createChild("div", "console-message-formatted-table");
- var dataGridContainer = tableElement.createChild("span");
- tableElement.appendChild(this._formatParameter(table, true, false));
- dataGridContainer.appendChild(this._dataGrid.element);
- formattedMessage.appendChild(formattedResult);
- this._dataGrid.renderInline();
+ if (columnRendered) {
+ var cellElement = this._renderPropertyPreviewOrAccessor(table, [rowProperty, cellProperty]);
+ cellElement.classList.add('console-message-nowrap-below');
+ rowValue[cellProperty.name] = cellElement;
}
- return formattedMessage;
- },
+ }
+ rows.push([rowProperty.name, rowValue]);
+ }
- /**
- * @param {!WebInspector.ConsoleMessage} consoleMessage
- * @return {!Element}
- */
- _buildMessage: function(consoleMessage)
- {
- var messageElement;
- if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.ConsoleAPI) {
- switch (consoleMessage.type) {
- case WebInspector.ConsoleMessage.MessageType.Trace:
- messageElement = this._format(consoleMessage.parameters || ["console.trace"]);
- break;
- case WebInspector.ConsoleMessage.MessageType.Clear:
- messageElement = createElementWithClass("span", "console-info");
- messageElement.textContent = WebInspector.UIString("Console was cleared");
- break;
- case WebInspector.ConsoleMessage.MessageType.Assert:
- var args = [WebInspector.UIString("Assertion failed:")];
- if (consoleMessage.parameters)
- args = args.concat(consoleMessage.parameters);
- messageElement = this._format(args);
- break;
- case WebInspector.ConsoleMessage.MessageType.Dir:
- var obj = consoleMessage.parameters ? consoleMessage.parameters[0] : undefined;
- var args = ["%O", obj];
- messageElement = this._format(args);
- break;
- case WebInspector.ConsoleMessage.MessageType.Profile:
- case WebInspector.ConsoleMessage.MessageType.ProfileEnd:
- messageElement = this._format([consoleMessage.messageText]);
- break;
- default:
- if (consoleMessage.parameters && consoleMessage.parameters.length === 1 && consoleMessage.parameters[0].type === "string")
- messageElement = this._tryFormatAsError(/** @type {string} */(consoleMessage.parameters[0].value));
- var args = consoleMessage.parameters || [consoleMessage.messageText];
- messageElement = messageElement || this._format(args);
- }
- } else if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.Network) {
- if (consoleMessage.request) {
- messageElement = createElement("span");
- if (consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Error || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError) {
- messageElement.createTextChildren(consoleMessage.request.requestMethod, " ");
- messageElement.appendChild(WebInspector.Linkifier.linkifyUsingRevealer(consoleMessage.request, consoleMessage.request.url, consoleMessage.request.url));
- if (consoleMessage.request.failed)
- messageElement.createTextChildren(" ", consoleMessage.request.localizedFailDescription);
- else
- messageElement.createTextChildren(" ", String(consoleMessage.request.statusCode), " (", consoleMessage.request.statusText, ")");
- } else {
- var fragment = WebInspector.linkifyStringAsFragmentWithCustomLinkifier(consoleMessage.messageText, linkifyRequest.bind(consoleMessage));
- messageElement.appendChild(fragment);
- }
- } else {
- messageElement = this._format([consoleMessage.messageText]);
- }
+ var flatValues = [];
+ for (var i = 0; i < rows.length; ++i) {
+ var rowName = rows[i][0];
+ var rowValue = rows[i][1];
+ flatValues.push(rowName);
+ for (var j = 0; j < columnNames.length; ++j)
+ flatValues.push(rowValue[columnNames[j]]);
+ }
+ columnNames.unshift(WebInspector.UIString('(index)'));
+
+ if (flatValues.length) {
+ this._dataGrid = WebInspector.SortableDataGrid.create(columnNames, flatValues);
+
+ var formattedResult = createElement('span');
+ var tableElement = formattedResult.createChild('div', 'console-message-formatted-table');
+ var dataGridContainer = tableElement.createChild('span');
+ tableElement.appendChild(this._formatParameter(table, true, false));
+ dataGridContainer.appendChild(this._dataGrid.element);
+ formattedMessage.appendChild(formattedResult);
+ this._dataGrid.renderInline();
+ }
+ return formattedMessage;
+ }
+
+ /**
+ * @param {!WebInspector.ConsoleMessage} consoleMessage
+ * @return {!Element}
+ */
+ _buildMessage(consoleMessage) {
+ var messageElement;
+ if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.ConsoleAPI) {
+ switch (consoleMessage.type) {
+ case WebInspector.ConsoleMessage.MessageType.Trace:
+ messageElement = this._format(consoleMessage.parameters || ['console.trace']);
+ break;
+ case WebInspector.ConsoleMessage.MessageType.Clear:
+ messageElement = createElementWithClass('span', 'console-info');
+ messageElement.textContent = WebInspector.UIString('Console was cleared');
+ break;
+ case WebInspector.ConsoleMessage.MessageType.Assert:
+ var args = [WebInspector.UIString('Assertion failed:')];
+ if (consoleMessage.parameters)
+ args = args.concat(consoleMessage.parameters);
+ messageElement = this._format(args);
+ break;
+ case WebInspector.ConsoleMessage.MessageType.Dir:
+ var obj = consoleMessage.parameters ? consoleMessage.parameters[0] : undefined;
+ var args = ['%O', obj];
+ messageElement = this._format(args);
+ break;
+ case WebInspector.ConsoleMessage.MessageType.Profile:
+ case WebInspector.ConsoleMessage.MessageType.ProfileEnd:
+ messageElement = this._format([consoleMessage.messageText]);
+ break;
+ default:
+ if (consoleMessage.parameters && consoleMessage.parameters.length === 1 &&
+ consoleMessage.parameters[0].type === 'string')
+ messageElement = this._tryFormatAsError(/** @type {string} */ (consoleMessage.parameters[0].value));
+ var args = consoleMessage.parameters || [consoleMessage.messageText];
+ messageElement = messageElement || this._format(args);
+ }
+ } else if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.Network) {
+ if (consoleMessage.request) {
+ messageElement = createElement('span');
+ if (consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Error ||
+ consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError) {
+ messageElement.createTextChildren(consoleMessage.request.requestMethod, ' ');
+ messageElement.appendChild(WebInspector.Linkifier.linkifyUsingRevealer(
+ consoleMessage.request, consoleMessage.request.url, consoleMessage.request.url));
+ if (consoleMessage.request.failed)
+ messageElement.createTextChildren(' ', consoleMessage.request.localizedFailDescription);
+ else
+ messageElement.createTextChildren(
+ ' ', String(consoleMessage.request.statusCode), ' (', consoleMessage.request.statusText, ')');
} else {
- var args = consoleMessage.parameters || [consoleMessage.messageText];
- messageElement = this._format(args);
- }
-
- var formattedMessage = createElement("span");
- WebInspector.appendStyle(formattedMessage, "components/objectValue.css");
- formattedMessage.className = "console-message-text source-code";
-
- var anchorElement = this._buildMessageAnchor(consoleMessage);
- if (anchorElement)
- formattedMessage.appendChild(anchorElement);
- formattedMessage.appendChild(messageElement);
- return formattedMessage;
-
- /**
- * @param {string} title
- * @return {!Element}
- * @this {WebInspector.ConsoleMessage}
- */
- function linkifyRequest(title)
- {
- return WebInspector.Linkifier.linkifyUsingRevealer(/** @type {!WebInspector.NetworkRequest} */ (this.request), title, this.request.url);
+ var fragment = WebInspector.linkifyStringAsFragmentWithCustomLinkifier(
+ consoleMessage.messageText, linkifyRequest.bind(consoleMessage));
+ messageElement.appendChild(fragment);
}
- },
+ } else {
+ messageElement = this._format([consoleMessage.messageText]);
+ }
+ } else {
+ var args = consoleMessage.parameters || [consoleMessage.messageText];
+ messageElement = this._format(args);
+ }
- /**
- * @param {!WebInspector.ConsoleMessage} consoleMessage
- * @return {?Element}
- */
- _buildMessageAnchor: function(consoleMessage)
- {
- var anchorElement = null;
- if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource.Network || consoleMessage.request) {
- if (consoleMessage.scriptId)
- anchorElement = this._linkifyScriptId(consoleMessage.scriptId, consoleMessage.url || "", consoleMessage.line, consoleMessage.column);
- else if (consoleMessage.stackTrace && consoleMessage.stackTrace.callFrames.length)
- anchorElement = this._linkifyStackTraceTopFrame(consoleMessage.stackTrace);
- else if (consoleMessage.url && consoleMessage.url !== "undefined")
- anchorElement = this._linkifyLocation(consoleMessage.url, consoleMessage.line, consoleMessage.column);
- } else if (consoleMessage.url) {
- var url = consoleMessage.url;
- var isExternal = !WebInspector.resourceForURL(url) && !WebInspector.networkMapping.uiSourceCodeForURLForAnyTarget(url);
- anchorElement = WebInspector.linkifyURLAsNode(url, url, "console-message-url", isExternal);
- }
+ var formattedMessage = createElement('span');
+ WebInspector.appendStyle(formattedMessage, 'components/objectValue.css');
+ formattedMessage.className = 'console-message-text source-code';
- // Append a space to prevent the anchor text from being glued to the console message when the user selects and copies the console messages.
- if (anchorElement)
- anchorElement.appendChild(createTextNode(" "));
- return anchorElement;
- },
+ var anchorElement = this._buildMessageAnchor(consoleMessage);
+ if (anchorElement)
+ formattedMessage.appendChild(anchorElement);
+ formattedMessage.appendChild(messageElement);
+ return formattedMessage;
/**
- * @param {!WebInspector.ConsoleMessage} consoleMessage
- * @param {!WebInspector.Target} target
- * @param {!WebInspector.Linkifier} linkifier
+ * @param {string} title
* @return {!Element}
+ * @this {WebInspector.ConsoleMessage}
*/
- _buildMessageWithStackTrace: function(consoleMessage, target, linkifier)
- {
- var toggleElement = createElementWithClass("div", "console-message-stack-trace-toggle");
- var triangleElement = toggleElement.createChild("div", "console-message-stack-trace-triangle");
- var contentElement = toggleElement.createChild("div", "console-message-stack-trace-wrapper");
-
- var messageElement = this._buildMessage(consoleMessage);
- var clickableElement = contentElement.createChild("div");
- clickableElement.appendChild(messageElement);
- var stackTraceElement = contentElement.createChild("div");
- var stackTracePreview = WebInspector.DOMPresentationUtils.buildStackTracePreviewContents(target, linkifier, consoleMessage.stackTrace);
- stackTraceElement.appendChild(stackTracePreview);
- stackTraceElement.classList.add("hidden");
-
- /**
- * @param {boolean} expand
- */
- function expandStackTrace(expand)
- {
- stackTraceElement.classList.toggle("hidden", !expand);
- toggleElement.classList.toggle("expanded", expand);
- }
-
- /**
- * @param {?Event} event
- */
- function toggleStackTrace(event)
- {
- if (event.target.hasSelection())
- return;
- expandStackTrace(stackTraceElement.classList.contains("hidden"));
- event.consume();
- }
-
- clickableElement.addEventListener("click", toggleStackTrace, false);
- triangleElement.addEventListener("click", toggleStackTrace, false);
- if (consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trace)
- expandStackTrace(true);
+ function linkifyRequest(title) {
+ return WebInspector.Linkifier.linkifyUsingRevealer(
+ /** @type {!WebInspector.NetworkRequest} */ (this.request), title, this.request.url);
+ }
+ }
+
+ /**
+ * @param {!WebInspector.ConsoleMessage} consoleMessage
+ * @return {?Element}
+ */
+ _buildMessageAnchor(consoleMessage) {
+ var anchorElement = null;
+ if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource.Network || consoleMessage.request) {
+ if (consoleMessage.scriptId)
+ anchorElement = this._linkifyScriptId(
+ consoleMessage.scriptId, consoleMessage.url || '', consoleMessage.line, consoleMessage.column);
+ else if (consoleMessage.stackTrace && consoleMessage.stackTrace.callFrames.length)
+ anchorElement = this._linkifyStackTraceTopFrame(consoleMessage.stackTrace);
+ else if (consoleMessage.url && consoleMessage.url !== 'undefined')
+ anchorElement = this._linkifyLocation(consoleMessage.url, consoleMessage.line, consoleMessage.column);
+ } else if (consoleMessage.url) {
+ var url = consoleMessage.url;
+ var isExternal =
+ !WebInspector.resourceForURL(url) && !WebInspector.networkMapping.uiSourceCodeForURLForAnyTarget(url);
+ anchorElement = WebInspector.linkifyURLAsNode(url, url, 'console-message-url', isExternal);
+ }
- toggleElement._expandStackTraceForTest = expandStackTrace.bind(null, true);
- return toggleElement;
- },
+ // Append a space to prevent the anchor text from being glued to the console message when the user selects and copies the console messages.
+ if (anchorElement)
+ anchorElement.appendChild(createTextNode(' '));
+ return anchorElement;
+ }
+
+ /**
+ * @param {!WebInspector.ConsoleMessage} consoleMessage
+ * @param {!WebInspector.Target} target
+ * @param {!WebInspector.Linkifier} linkifier
+ * @return {!Element}
+ */
+ _buildMessageWithStackTrace(consoleMessage, target, linkifier) {
+ var toggleElement = createElementWithClass('div', 'console-message-stack-trace-toggle');
+ var triangleElement = toggleElement.createChild('div', 'console-message-stack-trace-triangle');
+ var contentElement = toggleElement.createChild('div', 'console-message-stack-trace-wrapper');
+
+ var messageElement = this._buildMessage(consoleMessage);
+ var clickableElement = contentElement.createChild('div');
+ clickableElement.appendChild(messageElement);
+ var stackTraceElement = contentElement.createChild('div');
+ var stackTracePreview =
+ WebInspector.DOMPresentationUtils.buildStackTracePreviewContents(target, linkifier, consoleMessage.stackTrace);
+ stackTraceElement.appendChild(stackTracePreview);
+ stackTraceElement.classList.add('hidden');
/**
- * @param {string} url
- * @param {number} lineNumber
- * @param {number} columnNumber
- * @return {?Element}
+ * @param {boolean} expand
*/
- _linkifyLocation: function(url, lineNumber, columnNumber)
- {
- var target = this._target();
- if (!target)
- return null;
- return this._linkifier.linkifyScriptLocation(target, null, url, lineNumber, columnNumber, "console-message-url");
- },
-
- /**
- * @param {!RuntimeAgent.StackTrace} stackTrace
- * @return {?Element}
- */
- _linkifyStackTraceTopFrame: function(stackTrace)
- {
- var target = this._target();
- if (!target)
- return null;
- return this._linkifier.linkifyStackTraceTopFrame(target, stackTrace, "console-message-url");
- },
+ function expandStackTrace(expand) {
+ stackTraceElement.classList.toggle('hidden', !expand);
+ toggleElement.classList.toggle('expanded', expand);
+ }
/**
- * @param {string} scriptId
- * @param {string} url
- * @param {number} lineNumber
- * @param {number} columnNumber
- * @return {?Element}
+ * @param {?Event} event
*/
- _linkifyScriptId: function(scriptId, url, lineNumber, columnNumber)
- {
- var target = this._target();
- if (!target)
- return null;
- return this._linkifier.linkifyScriptLocation(target, scriptId, url, lineNumber, columnNumber, "console-message-url");
- },
+ function toggleStackTrace(event) {
+ if (event.target.hasSelection())
+ return;
+ expandStackTrace(stackTraceElement.classList.contains('hidden'));
+ event.consume();
+ }
- /**
- * @param {!WebInspector.RemoteObject|!Object|string} parameter
- * @param {?WebInspector.Target} target
- * @return {!WebInspector.RemoteObject}
- */
- _parameterToRemoteObject: function(parameter, target)
- {
- if (parameter instanceof WebInspector.RemoteObject)
- return parameter;
- if (!target)
- return WebInspector.RemoteObject.fromLocalObject(parameter);
- if (typeof parameter === "object")
- return target.runtimeModel.createRemoteObject(parameter);
- return target.runtimeModel.createRemoteObjectFromPrimitiveValue(parameter);
- },
+ clickableElement.addEventListener('click', toggleStackTrace, false);
+ triangleElement.addEventListener('click', toggleStackTrace, false);
+ if (consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trace)
+ expandStackTrace(true);
+
+ toggleElement._expandStackTraceForTest = expandStackTrace.bind(null, true);
+ return toggleElement;
+ }
+
+ /**
+ * @param {string} url
+ * @param {number} lineNumber
+ * @param {number} columnNumber
+ * @return {?Element}
+ */
+ _linkifyLocation(url, lineNumber, columnNumber) {
+ var target = this._target();
+ if (!target)
+ return null;
+ return this._linkifier.linkifyScriptLocation(target, null, url, lineNumber, columnNumber, 'console-message-url');
+ }
+
+ /**
+ * @param {!RuntimeAgent.StackTrace} stackTrace
+ * @return {?Element}
+ */
+ _linkifyStackTraceTopFrame(stackTrace) {
+ var target = this._target();
+ if (!target)
+ return null;
+ return this._linkifier.linkifyStackTraceTopFrame(target, stackTrace, 'console-message-url');
+ }
+
+ /**
+ * @param {string} scriptId
+ * @param {string} url
+ * @param {number} lineNumber
+ * @param {number} columnNumber
+ * @return {?Element}
+ */
+ _linkifyScriptId(scriptId, url, lineNumber, columnNumber) {
+ var target = this._target();
+ if (!target)
+ return null;
+ return this._linkifier.linkifyScriptLocation(
+ target, scriptId, url, lineNumber, columnNumber, 'console-message-url');
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject|!Object|string} parameter
+ * @param {?WebInspector.Target} target
+ * @return {!WebInspector.RemoteObject}
+ */
+ _parameterToRemoteObject(parameter, target) {
+ if (parameter instanceof WebInspector.RemoteObject)
+ return parameter;
+ if (!target)
+ return WebInspector.RemoteObject.fromLocalObject(parameter);
+ if (typeof parameter === 'object')
+ return target.runtimeModel.createRemoteObject(parameter);
+ return target.runtimeModel.createRemoteObjectFromPrimitiveValue(parameter);
+ }
+
+ /**
+ * @param {!Array.<!WebInspector.RemoteObject|string>} parameters
+ * @return {!Element}
+ */
+ _format(parameters) {
+ // This node is used like a Builder. Values are continually appended onto it.
+ var formattedResult = createElement('span');
+ if (!parameters.length)
+ return formattedResult;
+
+ // Formatting code below assumes that parameters are all wrappers whereas frontend console
+ // API allows passing arbitrary values as messages (strings, numbers, etc.). Wrap them here.
+ // FIXME: Only pass runtime wrappers here.
+ for (var i = 0; i < parameters.length; ++i)
+ parameters[i] = this._parameterToRemoteObject(parameters[i], this._target());
+
+ // There can be string log and string eval result. We distinguish between them based on message type.
+ var shouldFormatMessage = WebInspector.RemoteObject.type(
+ (/** @type {!Array.<!WebInspector.RemoteObject>} **/ (parameters))[0]) === 'string' &&
+ (this._message.type !== WebInspector.ConsoleMessage.MessageType.Result ||
+ this._message.level === WebInspector.ConsoleMessage.MessageLevel.Error ||
+ this._message.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError);
+
+ // Multiple parameters with the first being a format string. Save unused substitutions.
+ if (shouldFormatMessage) {
+ var result = this._formatWithSubstitutionString(
+ /** @type {string} **/ (parameters[0].description), parameters.slice(1), formattedResult);
+ parameters = result.unusedSubstitutions;
+ if (parameters.length)
+ formattedResult.createTextChild(' ');
+ }
- /**
- * @param {!Array.<!WebInspector.RemoteObject|string>} parameters
- * @return {!Element}
- */
- _format: function(parameters)
- {
- // This node is used like a Builder. Values are continually appended onto it.
- var formattedResult = createElement("span");
- if (!parameters.length)
- return formattedResult;
-
- // Formatting code below assumes that parameters are all wrappers whereas frontend console
- // API allows passing arbitrary values as messages (strings, numbers, etc.). Wrap them here.
- // FIXME: Only pass runtime wrappers here.
- for (var i = 0; i < parameters.length; ++i)
- parameters[i] = this._parameterToRemoteObject(parameters[i], this._target());
-
- // There can be string log and string eval result. We distinguish between them based on message type.
- var shouldFormatMessage = WebInspector.RemoteObject.type((/** @type {!Array.<!WebInspector.RemoteObject>} **/ (parameters))[0]) === "string" && (this._message.type !== WebInspector.ConsoleMessage.MessageType.Result || this._message.level === WebInspector.ConsoleMessage.MessageLevel.Error || this._message.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError);
-
- // Multiple parameters with the first being a format string. Save unused substitutions.
- if (shouldFormatMessage) {
- var result = this._formatWithSubstitutionString(/** @type {string} **/ (parameters[0].description), parameters.slice(1), formattedResult);
- parameters = result.unusedSubstitutions;
- if (parameters.length)
- formattedResult.createTextChild(" ");
- }
+ // Single parameter, or unused substitutions from above.
+ for (var i = 0; i < parameters.length; ++i) {
+ // Inline strings when formatting.
+ if (shouldFormatMessage && parameters[i].type === 'string')
+ formattedResult.appendChild(WebInspector.linkifyStringAsFragment(parameters[i].description));
+ else
+ formattedResult.appendChild(this._formatParameter(parameters[i], false, true));
+ if (i < parameters.length - 1)
+ formattedResult.createTextChild(' ');
+ }
+ return formattedResult;
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject} output
+ * @param {boolean=} forceObjectFormat
+ * @param {boolean=} includePreview
+ * @return {!Element}
+ */
+ _formatParameter(output, forceObjectFormat, includePreview) {
+ if (output.customPreview())
+ return (new WebInspector.CustomPreviewComponent(output)).element;
+
+ var type = forceObjectFormat ? 'object' : (output.subtype || output.type);
+ var element;
+ switch (type) {
+ case 'array':
+ case 'typedarray':
+ element = this._formatParameterAsArray(output);
+ break;
+ case 'error':
+ element = this._formatParameterAsError(output);
+ break;
+ case 'function':
+ case 'generator':
+ element = this._formatParameterAsFunction(output, includePreview);
+ break;
+ case 'iterator':
+ case 'map':
+ case 'object':
+ case 'promise':
+ case 'proxy':
+ case 'set':
+ element = this._formatParameterAsObject(output, includePreview);
+ break;
+ case 'node':
+ element = this._formatParameterAsNode(output);
+ break;
+ case 'string':
+ element = this._formatParameterAsString(output);
+ break;
+ case 'boolean':
+ case 'date':
+ case 'null':
+ case 'number':
+ case 'regexp':
+ case 'symbol':
+ case 'undefined':
+ element = this._formatParameterAsValue(output);
+ break;
+ default:
+ element = this._formatParameterAsValue(output);
+ console.error('Tried to format remote object of unknown type.');
+ }
+ element.classList.add('object-value-' + type);
+ element.classList.add('source-code');
+ return element;
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject} obj
+ * @return {!Element}
+ */
+ _formatParameterAsValue(obj) {
+ var result = createElement('span');
+ result.createTextChild(obj.description || '');
+ if (obj.objectId)
+ result.addEventListener('contextmenu', this._contextMenuEventFired.bind(this, obj), false);
+ return result;
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject} obj
+ * @param {boolean=} includePreview
+ * @return {!Element}
+ */
+ _formatParameterAsObject(obj, includePreview) {
+ var titleElement = createElement('span');
+ if (includePreview && obj.preview) {
+ titleElement.classList.add('console-object-preview');
+ this._previewFormatter.appendObjectPreview(titleElement, obj.preview);
+ } else if (obj.type === 'function') {
+ WebInspector.ObjectPropertiesSection.formatObjectAsFunction(obj, titleElement, false);
+ titleElement.classList.add('object-value-function');
+ } else {
+ titleElement.createTextChild(obj.description || '');
+ }
- // Single parameter, or unused substitutions from above.
- for (var i = 0; i < parameters.length; ++i) {
- // Inline strings when formatting.
- if (shouldFormatMessage && parameters[i].type === "string")
- formattedResult.appendChild(WebInspector.linkifyStringAsFragment(parameters[i].description));
- else
- formattedResult.appendChild(this._formatParameter(parameters[i], false, true));
- if (i < parameters.length - 1)
- formattedResult.createTextChild(" ");
- }
- return formattedResult;
- },
+ var section = new WebInspector.ObjectPropertiesSection(obj, titleElement, this._linkifier);
+ section.element.classList.add('console-view-object-properties-section');
+ section.enableContextMenu();
+ return section.element;
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject} func
+ * @param {boolean=} includePreview
+ * @return {!Element}
+ */
+ _formatParameterAsFunction(func, includePreview) {
+ var result = createElement('span');
+ WebInspector.RemoteFunction.objectAsFunction(func).targetFunction().then(formatTargetFunction.bind(this));
+ return result;
/**
- * @param {!WebInspector.RemoteObject} output
- * @param {boolean=} forceObjectFormat
- * @param {boolean=} includePreview
- * @return {!Element}
+ * @param {!WebInspector.RemoteObject} targetFunction
+ * @this {WebInspector.ConsoleViewMessage}
*/
- _formatParameter: function(output, forceObjectFormat, includePreview)
- {
- if (output.customPreview())
- return (new WebInspector.CustomPreviewComponent(output)).element;
-
- var type = forceObjectFormat ? "object" : (output.subtype || output.type);
- var element;
- switch (type) {
- case "array":
- case "typedarray":
- element = this._formatParameterAsArray(output);
- break;
- case "error":
- element = this._formatParameterAsError(output);
- break;
- case "function":
- case "generator":
- element = this._formatParameterAsFunction(output, includePreview);
- break;
- case "iterator":
- case "map":
- case "object":
- case "promise":
- case "proxy":
- case "set":
- element = this._formatParameterAsObject(output, includePreview);
- break;
- case "node":
- element = this._formatParameterAsNode(output);
- break;
- case "string":
- element = this._formatParameterAsString(output);
- break;
- case "boolean":
- case "date":
- case "null":
- case "number":
- case "regexp":
- case "symbol":
- case "undefined":
- element = this._formatParameterAsValue(output);
- break;
- default:
- element = this._formatParameterAsValue(output);
- console.error("Tried to format remote object of unknown type.");
- }
- element.classList.add("object-value-" + type);
- element.classList.add("source-code");
- return element;
- },
+ function formatTargetFunction(targetFunction) {
+ var functionElement = createElement('span');
+ WebInspector.ObjectPropertiesSection.formatObjectAsFunction(
+ targetFunction, functionElement, true, includePreview);
+ result.appendChild(functionElement);
+ if (targetFunction !== func) {
+ var note = result.createChild('span', 'object-info-state-note');
+ note.title = WebInspector.UIString('Function was resolved from bound function.');
+ }
+ result.addEventListener('contextmenu', this._contextMenuEventFired.bind(this, targetFunction), false);
+ }
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject} obj
+ * @param {!Event} event
+ */
+ _contextMenuEventFired(obj, event) {
+ var contextMenu = new WebInspector.ContextMenu(event);
+ contextMenu.appendApplicableItems(obj);
+ contextMenu.show();
+ }
+
+ /**
+ * @param {?WebInspector.RemoteObject} object
+ * @param {!Array.<!RuntimeAgent.PropertyPreview>} propertyPath
+ * @return {!Element}
+ */
+ _renderPropertyPreviewOrAccessor(object, propertyPath) {
+ var property = propertyPath.peekLast();
+ if (property.type === 'accessor')
+ return this._formatAsAccessorProperty(object, propertyPath.map(property => property.name), false);
+ return this._previewFormatter.renderPropertyPreview(
+ property.type, /** @type {string} */ (property.subtype), property.value);
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject} object
+ * @return {!Element}
+ */
+ _formatParameterAsNode(object) {
+ var result = createElement('span');
+ WebInspector.Renderer.renderPromise(object).then(appendRenderer.bind(this), failedToRender.bind(this));
+ return result;
/**
- * @param {!WebInspector.RemoteObject} obj
- * @return {!Element}
+ * @param {!Element} rendererElement
+ * @this {WebInspector.ConsoleViewMessage}
*/
- _formatParameterAsValue: function(obj)
- {
- var result = createElement("span");
- result.createTextChild(obj.description || "");
- if (obj.objectId)
- result.addEventListener("contextmenu", this._contextMenuEventFired.bind(this, obj), false);
- return result;
- },
+ function appendRenderer(rendererElement) {
+ result.appendChild(rendererElement);
+ this._formattedParameterAsNodeForTest();
+ }
/**
- * @param {!WebInspector.RemoteObject} obj
- * @param {boolean=} includePreview
- * @return {!Element}
+ * @this {WebInspector.ConsoleViewMessage}
*/
- _formatParameterAsObject: function(obj, includePreview)
- {
- var titleElement = createElement("span");
- if (includePreview && obj.preview) {
- titleElement.classList.add("console-object-preview");
- this._previewFormatter.appendObjectPreview(titleElement, obj.preview);
- } else if (obj.type === "function") {
- WebInspector.ObjectPropertiesSection.formatObjectAsFunction(obj, titleElement, false);
- titleElement.classList.add("object-value-function");
- } else {
- titleElement.createTextChild(obj.description || "");
- }
-
- var section = new WebInspector.ObjectPropertiesSection(obj, titleElement, this._linkifier);
- section.element.classList.add("console-view-object-properties-section");
- section.enableContextMenu();
- return section.element;
- },
+ function failedToRender() {
+ result.appendChild(this._formatParameterAsObject(object, false));
+ }
+ }
+
+ _formattedParameterAsNodeForTest() {
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject} array
+ * @return {!Element}
+ */
+ _formatParameterAsArray(array) {
+ var usePrintedArrayFormat = this._message.type !== WebInspector.ConsoleMessage.MessageType.DirXML &&
+ this._message.type !== WebInspector.ConsoleMessage.MessageType.Result;
+ var isLongArray = array.arrayLength() > 100;
+ if (usePrintedArrayFormat || isLongArray)
+ return this._formatParameterAsObject(array, usePrintedArrayFormat || !isLongArray);
+ var result = createElement('span');
+ array.getAllProperties(false, printArrayResult.bind(this));
+ return result;
/**
- * @param {!WebInspector.RemoteObject} func
- * @param {boolean=} includePreview
- * @return {!Element}
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
+ * @this {!WebInspector.ConsoleViewMessage}
*/
- _formatParameterAsFunction: function(func, includePreview)
- {
- var result = createElement("span");
- WebInspector.RemoteFunction.objectAsFunction(func).targetFunction().then(formatTargetFunction.bind(this));
- return result;
-
- /**
- * @param {!WebInspector.RemoteObject} targetFunction
- * @this {WebInspector.ConsoleViewMessage}
- */
- function formatTargetFunction(targetFunction)
- {
- var functionElement = createElement("span");
- WebInspector.ObjectPropertiesSection.formatObjectAsFunction(targetFunction, functionElement, true, includePreview);
- result.appendChild(functionElement);
- if (targetFunction !== func) {
- var note = result.createChild("span", "object-info-state-note");
- note.title = WebInspector.UIString("Function was resolved from bound function.");
- }
- result.addEventListener("contextmenu", this._contextMenuEventFired.bind(this, targetFunction), false);
+ function printArrayResult(properties) {
+ if (!properties) {
+ result.appendChild(this._formatParameterAsObject(array, false));
+ return;
+ }
+
+ var titleElement = createElement('span');
+ var elements = {};
+ for (var i = 0; i < properties.length; ++i) {
+ var property = properties[i];
+ var name = property.name;
+ if (isNaN(name))
+ continue;
+ if (property.getter)
+ elements[name] = this._formatAsAccessorProperty(array, [name], true);
+ else if (property.value)
+ elements[name] = this._formatAsArrayEntry(property.value);
+ }
+
+ titleElement.createTextChild('[');
+ var lastNonEmptyIndex = -1;
+
+ function appendUndefined(titleElement, index) {
+ if (index - lastNonEmptyIndex <= 1)
+ return;
+ var span = titleElement.createChild('span', 'object-value-undefined');
+ span.textContent = WebInspector.UIString('undefined × %d', index - lastNonEmptyIndex - 1);
+ }
+
+ var length = array.arrayLength();
+ for (var i = 0; i < length; ++i) {
+ var element = elements[i];
+ if (!element)
+ continue;
+
+ if (i - lastNonEmptyIndex > 1) {
+ appendUndefined(titleElement, i);
+ titleElement.createTextChild(', ');
}
- },
-
- /**
- * @param {!WebInspector.RemoteObject} obj
- * @param {!Event} event
- */
- _contextMenuEventFired: function(obj, event)
- {
- var contextMenu = new WebInspector.ContextMenu(event);
- contextMenu.appendApplicableItems(obj);
- contextMenu.show();
- },
-
- /**
- * @param {?WebInspector.RemoteObject} object
- * @param {!Array.<!RuntimeAgent.PropertyPreview>} propertyPath
- * @return {!Element}
- */
- _renderPropertyPreviewOrAccessor: function(object, propertyPath)
- {
- var property = propertyPath.peekLast();
- if (property.type === "accessor")
- return this._formatAsAccessorProperty(object, propertyPath.map(property => property.name), false);
- return this._previewFormatter.renderPropertyPreview(property.type, /** @type {string} */ (property.subtype), property.value);
- },
- /**
- * @param {!WebInspector.RemoteObject} object
- * @return {!Element}
- */
- _formatParameterAsNode: function(object)
- {
- var result = createElement("span");
- WebInspector.Renderer.renderPromise(object).then(appendRenderer.bind(this), failedToRender.bind(this));
- return result;
-
- /**
- * @param {!Element} rendererElement
- * @this {WebInspector.ConsoleViewMessage}
- */
- function appendRenderer(rendererElement)
- {
- result.appendChild(rendererElement);
- this._formattedParameterAsNodeForTest();
- }
+ titleElement.appendChild(element);
+ lastNonEmptyIndex = i;
+ if (i < length - 1)
+ titleElement.createTextChild(', ');
+ }
+ appendUndefined(titleElement, length);
- /**
- * @this {WebInspector.ConsoleViewMessage}
- */
- function failedToRender()
- {
- result.appendChild(this._formatParameterAsObject(object, false));
- }
- },
+ titleElement.createTextChild(']');
- _formattedParameterAsNodeForTest: function()
- {
- },
+ var section = new WebInspector.ObjectPropertiesSection(array, titleElement, this._linkifier);
+ section.element.classList.add('console-view-object-properties-section');
+ section.enableContextMenu();
+ result.appendChild(section.element);
+ }
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject} output
+ * @return {!Element}
+ */
+ _formatParameterAsString(output) {
+ var span = createElement('span');
+ span.appendChild(WebInspector.linkifyStringAsFragment(output.description || ''));
+
+ var result = createElement('span');
+ result.createChild('span', 'object-value-string-quote').textContent = '"';
+ result.appendChild(span);
+ result.createChild('span', 'object-value-string-quote').textContent = '"';
+ return result;
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject} output
+ * @return {!Element}
+ */
+ _formatParameterAsError(output) {
+ var result = createElement('span');
+ var errorSpan = this._tryFormatAsError(output.description || '');
+ result.appendChild(errorSpan ? errorSpan : WebInspector.linkifyStringAsFragment(output.description || ''));
+ return result;
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject} output
+ * @return {!Element}
+ */
+ _formatAsArrayEntry(output) {
+ return this._previewFormatter.renderPropertyPreview(output.type, output.subtype, output.description);
+ }
+
+ /**
+ * @param {?WebInspector.RemoteObject} object
+ * @param {!Array.<string>} propertyPath
+ * @param {boolean} isArrayEntry
+ * @return {!Element}
+ */
+ _formatAsAccessorProperty(object, propertyPath, isArrayEntry) {
+ var rootElement = WebInspector.ObjectPropertyTreeElement.createRemoteObjectAccessorPropertySpan(
+ object, propertyPath, onInvokeGetterClick.bind(this));
/**
- * @param {!WebInspector.RemoteObject} array
- * @return {!Element}
+ * @param {?WebInspector.RemoteObject} result
+ * @param {boolean=} wasThrown
+ * @this {WebInspector.ConsoleViewMessage}
*/
- _formatParameterAsArray: function(array)
- {
- var usePrintedArrayFormat = this._message.type !== WebInspector.ConsoleMessage.MessageType.DirXML && this._message.type !== WebInspector.ConsoleMessage.MessageType.Result;
- var isLongArray = array.arrayLength() > 100;
- if (usePrintedArrayFormat || isLongArray)
- return this._formatParameterAsObject(array, usePrintedArrayFormat || !isLongArray);
- var result = createElement("span");
- array.getAllProperties(false, printArrayResult.bind(this));
- return result;
-
- /**
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
- * @this {!WebInspector.ConsoleViewMessage}
- */
- function printArrayResult(properties)
- {
- if (!properties) {
- result.appendChild(this._formatParameterAsObject(array, false));
- return;
- }
-
- var titleElement = createElement("span");
- var elements = {};
- for (var i = 0; i < properties.length; ++i) {
- var property = properties[i];
- var name = property.name;
- if (isNaN(name))
- continue;
- if (property.getter)
- elements[name] = this._formatAsAccessorProperty(array, [name], true);
- else if (property.value)
- elements[name] = this._formatAsArrayEntry(property.value);
- }
-
- titleElement.createTextChild("[");
- var lastNonEmptyIndex = -1;
-
- function appendUndefined(titleElement, index)
- {
- if (index - lastNonEmptyIndex <= 1)
- return;
- var span = titleElement.createChild("span", "object-value-undefined");
- span.textContent = WebInspector.UIString("undefined × %d", index - lastNonEmptyIndex - 1);
- }
-
- var length = array.arrayLength();
- for (var i = 0; i < length; ++i) {
- var element = elements[i];
- if (!element)
- continue;
-
- if (i - lastNonEmptyIndex > 1) {
- appendUndefined(titleElement, i);
- titleElement.createTextChild(", ");
- }
-
- titleElement.appendChild(element);
- lastNonEmptyIndex = i;
- if (i < length - 1)
- titleElement.createTextChild(", ");
- }
- appendUndefined(titleElement, length);
-
- titleElement.createTextChild("]");
-
- var section = new WebInspector.ObjectPropertiesSection(array, titleElement, this._linkifier);
- section.element.classList.add("console-view-object-properties-section");
- section.enableContextMenu();
- result.appendChild(section.element);
+ function onInvokeGetterClick(result, wasThrown) {
+ if (!result)
+ return;
+ rootElement.removeChildren();
+ if (wasThrown) {
+ var element = rootElement.createChild('span');
+ element.textContent = WebInspector.UIString('<exception>');
+ element.title = /** @type {string} */ (result.description);
+ } else if (isArrayEntry) {
+ rootElement.appendChild(this._formatAsArrayEntry(result));
+ } else {
+ // Make a PropertyPreview from the RemoteObject similar to the backend logic.
+ const maxLength = 100;
+ var type = result.type;
+ var subtype = result.subtype;
+ var description = '';
+ if (type !== 'function' && result.description) {
+ if (type === 'string' || subtype === 'regexp')
+ description = result.description.trimMiddle(maxLength);
+ else
+ description = result.description.trimEnd(maxLength);
}
- },
+ rootElement.appendChild(this._previewFormatter.renderPropertyPreview(type, subtype, description));
+ }
+ }
- /**
- * @param {!WebInspector.RemoteObject} output
- * @return {!Element}
- */
- _formatParameterAsString: function(output)
- {
- var span = createElement("span");
- span.appendChild(WebInspector.linkifyStringAsFragment(output.description || ""));
-
- var result = createElement("span");
- result.createChild("span", "object-value-string-quote").textContent = "\"";
- result.appendChild(span);
- result.createChild("span", "object-value-string-quote").textContent = "\"";
- return result;
- },
+ return rootElement;
+ }
- /**
- * @param {!WebInspector.RemoteObject} output
- * @return {!Element}
- */
- _formatParameterAsError: function(output)
- {
- var result = createElement("span");
- var errorSpan = this._tryFormatAsError(output.description || "");
- result.appendChild(errorSpan ? errorSpan : WebInspector.linkifyStringAsFragment(output.description || ""));
- return result;
- },
-
- /**
- * @param {!WebInspector.RemoteObject} output
- * @return {!Element}
- */
- _formatAsArrayEntry: function(output)
- {
- return this._previewFormatter.renderPropertyPreview(output.type, output.subtype, output.description);
- },
+ /**
+ * @param {string} format
+ * @param {!Array.<!WebInspector.RemoteObject>} parameters
+ * @param {!Element} formattedResult
+ */
+ _formatWithSubstitutionString(format, parameters, formattedResult) {
+ var formatters = {};
/**
- * @param {?WebInspector.RemoteObject} object
- * @param {!Array.<string>} propertyPath
- * @param {boolean} isArrayEntry
+ * @param {boolean} force
+ * @param {!WebInspector.RemoteObject} obj
* @return {!Element}
+ * @this {WebInspector.ConsoleViewMessage}
*/
- _formatAsAccessorProperty: function(object, propertyPath, isArrayEntry)
- {
- var rootElement = WebInspector.ObjectPropertyTreeElement.createRemoteObjectAccessorPropertySpan(object, propertyPath, onInvokeGetterClick.bind(this));
-
- /**
- * @param {?WebInspector.RemoteObject} result
- * @param {boolean=} wasThrown
- * @this {WebInspector.ConsoleViewMessage}
- */
- function onInvokeGetterClick(result, wasThrown)
- {
- if (!result)
- return;
- rootElement.removeChildren();
- if (wasThrown) {
- var element = rootElement.createChild("span");
- element.textContent = WebInspector.UIString("<exception>");
- element.title = /** @type {string} */ (result.description);
- } else if (isArrayEntry) {
- rootElement.appendChild(this._formatAsArrayEntry(result));
- } else {
- // Make a PropertyPreview from the RemoteObject similar to the backend logic.
- const maxLength = 100;
- var type = result.type;
- var subtype = result.subtype;
- var description = "";
- if (type !== "function" && result.description) {
- if (type === "string" || subtype === "regexp")
- description = result.description.trimMiddle(maxLength);
- else
- description = result.description.trimEnd(maxLength);
- }
- rootElement.appendChild(this._previewFormatter.renderPropertyPreview(type, subtype, description));
- }
- }
-
- return rootElement;
- },
-
- /**
- * @param {string} format
- * @param {!Array.<!WebInspector.RemoteObject>} parameters
- * @param {!Element} formattedResult
- */
- _formatWithSubstitutionString: function(format, parameters, formattedResult)
- {
- var formatters = {};
-
- /**
- * @param {boolean} force
- * @param {!WebInspector.RemoteObject} obj
- * @return {!Element}
- * @this {WebInspector.ConsoleViewMessage}
- */
- function parameterFormatter(force, obj)
- {
- return this._formatParameter(obj, force, false);
- }
-
- function stringFormatter(obj)
- {
- return obj.description;
- }
-
- function floatFormatter(obj)
- {
- if (typeof obj.value !== "number")
- return "NaN";
- return obj.value;
- }
-
- function integerFormatter(obj)
- {
- if (typeof obj.value !== "number")
- return "NaN";
- return Math.floor(obj.value);
- }
-
- function bypassFormatter(obj)
- {
- return (obj instanceof Node) ? obj : "";
- }
-
- var currentStyle = null;
- function styleFormatter(obj)
- {
- currentStyle = {};
- var buffer = createElement("span");
- buffer.setAttribute("style", obj.description);
- for (var i = 0; i < buffer.style.length; i++) {
- var property = buffer.style[i];
- if (isWhitelistedProperty(property))
- currentStyle[property] = buffer.style[property];
- }
- }
-
- function isWhitelistedProperty(property)
- {
- var prefixes = ["background", "border", "color", "font", "line", "margin", "padding", "text", "-webkit-background", "-webkit-border", "-webkit-font", "-webkit-margin", "-webkit-padding", "-webkit-text"];
- for (var i = 0; i < prefixes.length; i++) {
- if (property.startsWith(prefixes[i]))
- return true;
- }
- return false;
- }
+ function parameterFormatter(force, obj) {
+ return this._formatParameter(obj, force, false);
+ }
- // Firebug uses %o for formatting objects.
- formatters.o = parameterFormatter.bind(this, false);
- formatters.s = stringFormatter;
- formatters.f = floatFormatter;
- // Firebug allows both %i and %d for formatting integers.
- formatters.i = integerFormatter;
- formatters.d = integerFormatter;
-
- // Firebug uses %c for styling the message.
- formatters.c = styleFormatter;
-
- // Support %O to force object formatting, instead of the type-based %o formatting.
- formatters.O = parameterFormatter.bind(this, true);
-
- formatters._ = bypassFormatter;
-
- function append(a, b)
- {
- if (b instanceof Node)
- a.appendChild(b);
- else if (typeof b !== "undefined") {
- var toAppend = WebInspector.linkifyStringAsFragment(String(b));
- if (currentStyle) {
- var wrapper = createElement("span");
- wrapper.appendChild(toAppend);
- applyCurrentStyle(wrapper);
- for (var i = 0; i < wrapper.children.length; ++i)
- applyCurrentStyle(wrapper.children[i]);
- toAppend = wrapper;
- }
- a.appendChild(toAppend);
- }
- return a;
- }
+ function stringFormatter(obj) {
+ return obj.description;
+ }
- /**
- * @param {!Element} element
- */
- function applyCurrentStyle(element)
- {
- for (var key in currentStyle)
- element.style[key] = currentStyle[key];
- }
+ function floatFormatter(obj) {
+ if (typeof obj.value !== 'number')
+ return 'NaN';
+ return obj.value;
+ }
- // String.format does treat formattedResult like a Builder, result is an object.
- return String.format(format, parameters, formatters, formattedResult, append);
- },
+ function integerFormatter(obj) {
+ if (typeof obj.value !== 'number')
+ return 'NaN';
+ return Math.floor(obj.value);
+ }
- /**
- * @return {boolean}
- */
- matchesFilterRegex: function(regexObject)
- {
- regexObject.lastIndex = 0;
- var text = this.contentElement().deepTextContent();
- return regexObject.test(text);
- },
+ function bypassFormatter(obj) {
+ return (obj instanceof Node) ? obj : '';
+ }
- /**
- * @param {boolean} show
- */
- updateTimestamp: function(show)
- {
- if (!this._contentElement)
- return;
-
- if (show && !this.timestampElement) {
- this.timestampElement = createElementWithClass("span", "console-timestamp");
- this.timestampElement.textContent = (new Date(this._message.timestamp)).toConsoleTime() + " ";
- this._contentElement.insertBefore(this.timestampElement, this._contentElement.firstChild);
- return;
- }
+ var currentStyle = null;
+ function styleFormatter(obj) {
+ currentStyle = {};
+ var buffer = createElement('span');
+ buffer.setAttribute('style', obj.description);
+ for (var i = 0; i < buffer.style.length; i++) {
+ var property = buffer.style[i];
+ if (isWhitelistedProperty(property))
+ currentStyle[property] = buffer.style[property];
+ }
+ }
- if (!show && this.timestampElement) {
- this.timestampElement.remove();
- delete this.timestampElement;
- }
- },
+ function isWhitelistedProperty(property) {
+ var prefixes = [
+ 'background', 'border', 'color', 'font', 'line', 'margin', 'padding', 'text', '-webkit-background',
+ '-webkit-border', '-webkit-font', '-webkit-margin', '-webkit-padding', '-webkit-text'
+ ];
+ for (var i = 0; i < prefixes.length; i++) {
+ if (property.startsWith(prefixes[i]))
+ return true;
+ }
+ return false;
+ }
- /**
- * @return {number}
- */
- nestingLevel: function()
- {
- return this._nestingLevel;
- },
-
- resetCloseGroupDecorationCount: function()
- {
- if (!this._closeGroupDecorationCount)
- return;
- this._closeGroupDecorationCount = 0;
- this._updateCloseGroupDecorations();
- },
-
- incrementCloseGroupDecorationCount: function()
- {
- ++this._closeGroupDecorationCount;
- this._updateCloseGroupDecorations();
- },
-
- _updateCloseGroupDecorations: function()
- {
- if (!this._nestingLevelMarkers)
- return;
- for (var i = 0, n = this._nestingLevelMarkers.length; i < n; ++i) {
- var marker = this._nestingLevelMarkers[i];
- marker.classList.toggle("group-closed", n - i <= this._closeGroupDecorationCount);
+ // Firebug uses %o for formatting objects.
+ formatters.o = parameterFormatter.bind(this, false);
+ formatters.s = stringFormatter;
+ formatters.f = floatFormatter;
+ // Firebug allows both %i and %d for formatting integers.
+ formatters.i = integerFormatter;
+ formatters.d = integerFormatter;
+
+ // Firebug uses %c for styling the message.
+ formatters.c = styleFormatter;
+
+ // Support %O to force object formatting, instead of the type-based %o formatting.
+ formatters.O = parameterFormatter.bind(this, true);
+
+ formatters._ = bypassFormatter;
+
+ function append(a, b) {
+ if (b instanceof Node)
+ a.appendChild(b);
+ else if (typeof b !== 'undefined') {
+ var toAppend = WebInspector.linkifyStringAsFragment(String(b));
+ if (currentStyle) {
+ var wrapper = createElement('span');
+ wrapper.appendChild(toAppend);
+ applyCurrentStyle(wrapper);
+ for (var i = 0; i < wrapper.children.length; ++i)
+ applyCurrentStyle(wrapper.children[i]);
+ toAppend = wrapper;
}
- },
+ a.appendChild(toAppend);
+ }
+ return a;
+ }
/**
- * @return {!Element}
+ * @param {!Element} element
*/
- contentElement: function()
- {
- if (this._contentElement)
- return this._contentElement;
-
- var contentElement = createElementWithClass("div", "console-message");
- this._contentElement = contentElement;
- if (this._message.type === WebInspector.ConsoleMessage.MessageType.StartGroup || this._message.type === WebInspector.ConsoleMessage.MessageType.StartGroupCollapsed)
- contentElement.classList.add("console-group-title");
-
- var formattedMessage;
- var consoleMessage = this._message;
- var target = consoleMessage.target();
- var shouldIncludeTrace = !!consoleMessage.stackTrace && (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.Network || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Error || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError || consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trace || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Warning);
- if (target && shouldIncludeTrace)
- formattedMessage = this._buildMessageWithStackTrace(consoleMessage, target, this._linkifier);
- else if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table)
- formattedMessage = this._buildTableMessage(this._message);
- else
- formattedMessage = this._buildMessage(consoleMessage);
- contentElement.appendChild(formattedMessage);
-
- this.updateTimestamp(WebInspector.moduleSetting("consoleTimestampsEnabled").get());
- return this._contentElement;
- },
+ function applyCurrentStyle(element) {
+ for (var key in currentStyle)
+ element.style[key] = currentStyle[key];
+ }
- /**
- * @return {!Element}
- */
- toMessageElement: function()
- {
- if (this._element)
- return this._element;
-
- this._element = createElement("div");
- this.updateMessageElement();
- return this._element;
- },
-
- updateMessageElement: function()
- {
- if (!this._element)
- return;
-
- this._element.className = "console-message-wrapper";
- this._element.removeChildren();
-
- this._nestingLevelMarkers = [];
- for (var i = 0; i < this._nestingLevel; ++i)
- this._nestingLevelMarkers.push(this._element.createChild("div", "nesting-level-marker"));
- this._updateCloseGroupDecorations();
- this._element.message = this;
-
- switch (this._message.level) {
- case WebInspector.ConsoleMessage.MessageLevel.Log:
- this._element.classList.add("console-log-level");
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Debug:
- this._element.classList.add("console-debug-level");
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Warning:
- this._element.classList.add("console-warning-level");
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Error:
- this._element.classList.add("console-error-level");
- break;
- case WebInspector.ConsoleMessage.MessageLevel.RevokedError:
- this._element.classList.add("console-revokedError-level");
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Info:
- this._element.classList.add("console-info-level");
- break;
- }
+ // String.format does treat formattedResult like a Builder, result is an object.
+ return String.format(format, parameters, formatters, formattedResult, append);
+ }
+
+ /**
+ * @return {boolean}
+ */
+ matchesFilterRegex(regexObject) {
+ regexObject.lastIndex = 0;
+ var text = this.contentElement().deepTextContent();
+ return regexObject.test(text);
+ }
+
+ /**
+ * @param {boolean} show
+ */
+ updateTimestamp(show) {
+ if (!this._contentElement)
+ return;
+
+ if (show && !this.timestampElement) {
+ this.timestampElement = createElementWithClass('span', 'console-timestamp');
+ this.timestampElement.textContent = (new Date(this._message.timestamp)).toConsoleTime() + ' ';
+ this._contentElement.insertBefore(this.timestampElement, this._contentElement.firstChild);
+ return;
+ }
- this._element.appendChild(this.contentElement());
- if (this._repeatCount > 1)
- this._showRepeatCountElement();
- },
+ if (!show && this.timestampElement) {
+ this.timestampElement.remove();
+ delete this.timestampElement;
+ }
+ }
+
+ /**
+ * @return {number}
+ */
+ nestingLevel() {
+ return this._nestingLevel;
+ }
+
+ resetCloseGroupDecorationCount() {
+ if (!this._closeGroupDecorationCount)
+ return;
+ this._closeGroupDecorationCount = 0;
+ this._updateCloseGroupDecorations();
+ }
+
+ incrementCloseGroupDecorationCount() {
+ ++this._closeGroupDecorationCount;
+ this._updateCloseGroupDecorations();
+ }
+
+ _updateCloseGroupDecorations() {
+ if (!this._nestingLevelMarkers)
+ return;
+ for (var i = 0, n = this._nestingLevelMarkers.length; i < n; ++i) {
+ var marker = this._nestingLevelMarkers[i];
+ marker.classList.toggle('group-closed', n - i <= this._closeGroupDecorationCount);
+ }
+ }
+
+ /**
+ * @return {!Element}
+ */
+ contentElement() {
+ if (this._contentElement)
+ return this._contentElement;
+
+ var contentElement = createElementWithClass('div', 'console-message');
+ this._contentElement = contentElement;
+ if (this._message.type === WebInspector.ConsoleMessage.MessageType.StartGroup ||
+ this._message.type === WebInspector.ConsoleMessage.MessageType.StartGroupCollapsed)
+ contentElement.classList.add('console-group-title');
+
+ var formattedMessage;
+ var consoleMessage = this._message;
+ var target = consoleMessage.target();
+ var shouldIncludeTrace = !!consoleMessage.stackTrace &&
+ (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.Network ||
+ consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Error ||
+ consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError ||
+ consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trace ||
+ consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Warning);
+ if (target && shouldIncludeTrace)
+ formattedMessage = this._buildMessageWithStackTrace(consoleMessage, target, this._linkifier);
+ else if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table)
+ formattedMessage = this._buildTableMessage(this._message);
+ else
+ formattedMessage = this._buildMessage(consoleMessage);
+ contentElement.appendChild(formattedMessage);
+
+ this.updateTimestamp(WebInspector.moduleSetting('consoleTimestampsEnabled').get());
+ return this._contentElement;
+ }
+
+ /**
+ * @return {!Element}
+ */
+ toMessageElement() {
+ if (this._element)
+ return this._element;
+
+ this._element = createElement('div');
+ this.updateMessageElement();
+ return this._element;
+ }
+
+ updateMessageElement() {
+ if (!this._element)
+ return;
+
+ this._element.className = 'console-message-wrapper';
+ this._element.removeChildren();
+
+ this._nestingLevelMarkers = [];
+ for (var i = 0; i < this._nestingLevel; ++i)
+ this._nestingLevelMarkers.push(this._element.createChild('div', 'nesting-level-marker'));
+ this._updateCloseGroupDecorations();
+ this._element.message = this;
+
+ switch (this._message.level) {
+ case WebInspector.ConsoleMessage.MessageLevel.Log:
+ this._element.classList.add('console-log-level');
+ break;
+ case WebInspector.ConsoleMessage.MessageLevel.Debug:
+ this._element.classList.add('console-debug-level');
+ break;
+ case WebInspector.ConsoleMessage.MessageLevel.Warning:
+ this._element.classList.add('console-warning-level');
+ break;
+ case WebInspector.ConsoleMessage.MessageLevel.Error:
+ this._element.classList.add('console-error-level');
+ break;
+ case WebInspector.ConsoleMessage.MessageLevel.RevokedError:
+ this._element.classList.add('console-revokedError-level');
+ break;
+ case WebInspector.ConsoleMessage.MessageLevel.Info:
+ this._element.classList.add('console-info-level');
+ break;
+ }
- /**
- * @return {number}
- */
- repeatCount: function()
- {
- return this._repeatCount || 1;
- },
-
- resetIncrementRepeatCount: function()
- {
- this._repeatCount = 1;
- if (!this._repeatCountElement)
- return;
-
- this._repeatCountElement.remove();
- delete this._repeatCountElement;
- },
-
- incrementRepeatCount: function()
- {
- this._repeatCount++;
- this._showRepeatCountElement();
- },
-
- _showRepeatCountElement: function()
- {
- if (!this._contentElement)
- return;
-
- if (!this._repeatCountElement) {
- this._repeatCountElement = createElementWithClass("label", "console-message-repeat-count", "dt-small-bubble");
- switch (this._message.level) {
- case WebInspector.ConsoleMessage.MessageLevel.Warning:
- this._repeatCountElement.type = "warning";
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Error:
- this._repeatCountElement.type = "error";
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Debug:
- this._repeatCountElement.type = "debug";
- break;
- default:
- this._repeatCountElement.type = "info";
- }
- this._element.insertBefore(this._repeatCountElement, this._contentElement);
- this._contentElement.classList.add("repeated-message");
- }
- this._repeatCountElement.textContent = this._repeatCount;
- },
+ this._element.appendChild(this.contentElement());
+ if (this._repeatCount > 1)
+ this._showRepeatCountElement();
+ }
- get text()
- {
- return this._message.messageText;
- },
+ /**
+ * @return {number}
+ */
+ repeatCount() {
+ return this._repeatCount || 1;
+ }
- /**
- * @param {?RegExp} regex
- */
- setSearchRegex: function(regex)
- {
- if (this._searchHiglightNodeChanges && this._searchHiglightNodeChanges.length)
- WebInspector.revertDomChanges(this._searchHiglightNodeChanges);
- this._searchRegex = regex;
- this._searchHighlightNodes = [];
- this._searchHiglightNodeChanges = [];
- if (!this._searchRegex)
- return;
-
- var text = this.contentElement().deepTextContent();
- var match;
- this._searchRegex.lastIndex = 0;
- var sourceRanges = [];
- while ((match = this._searchRegex.exec(text)) && match[0])
- sourceRanges.push(new WebInspector.SourceRange(match.index, match[0].length));
-
- if (sourceRanges.length)
- this._searchHighlightNodes = WebInspector.highlightSearchResults(this.contentElement(), sourceRanges, this._searchHiglightNodeChanges);
- },
+ resetIncrementRepeatCount() {
+ this._repeatCount = 1;
+ if (!this._repeatCountElement)
+ return;
- /**
- * @return {?RegExp}
- */
- searchRegex: function()
- {
- return this._searchRegex;
- },
+ this._repeatCountElement.remove();
+ delete this._repeatCountElement;
+ }
- /**
- * @return {number}
- */
- searchCount: function()
- {
- return this._searchHighlightNodes.length;
- },
+ incrementRepeatCount() {
+ this._repeatCount++;
+ this._showRepeatCountElement();
+ }
- /**
- * @return {!Element}
- */
- searchHighlightNode: function(index)
- {
- return this._searchHighlightNodes[index];
- },
+ _showRepeatCountElement() {
+ if (!this._contentElement)
+ return;
+ if (!this._repeatCountElement) {
+ this._repeatCountElement = createElementWithClass('label', 'console-message-repeat-count', 'dt-small-bubble');
+ switch (this._message.level) {
+ case WebInspector.ConsoleMessage.MessageLevel.Warning:
+ this._repeatCountElement.type = 'warning';
+ break;
+ case WebInspector.ConsoleMessage.MessageLevel.Error:
+ this._repeatCountElement.type = 'error';
+ break;
+ case WebInspector.ConsoleMessage.MessageLevel.Debug:
+ this._repeatCountElement.type = 'debug';
+ break;
+ default:
+ this._repeatCountElement.type = 'info';
+ }
+ this._element.insertBefore(this._repeatCountElement, this._contentElement);
+ this._contentElement.classList.add('repeated-message');
+ }
+ this._repeatCountElement.textContent = this._repeatCount;
+ }
+
+ get text() {
+ return this._message.messageText;
+ }
+
+ /**
+ * @param {?RegExp} regex
+ */
+ setSearchRegex(regex) {
+ if (this._searchHiglightNodeChanges && this._searchHiglightNodeChanges.length)
+ WebInspector.revertDomChanges(this._searchHiglightNodeChanges);
+ this._searchRegex = regex;
+ this._searchHighlightNodes = [];
+ this._searchHiglightNodeChanges = [];
+ if (!this._searchRegex)
+ return;
+
+ var text = this.contentElement().deepTextContent();
+ var match;
+ this._searchRegex.lastIndex = 0;
+ var sourceRanges = [];
+ while ((match = this._searchRegex.exec(text)) && match[0])
+ sourceRanges.push(new WebInspector.SourceRange(match.index, match[0].length));
+
+ if (sourceRanges.length)
+ this._searchHighlightNodes =
+ WebInspector.highlightSearchResults(this.contentElement(), sourceRanges, this._searchHiglightNodeChanges);
+ }
+
+ /**
+ * @return {?RegExp}
+ */
+ searchRegex() {
+ return this._searchRegex;
+ }
+
+ /**
+ * @return {number}
+ */
+ searchCount() {
+ return this._searchHighlightNodes.length;
+ }
+
+ /**
+ * @return {!Element}
+ */
+ searchHighlightNode(index) {
+ return this._searchHighlightNodes[index];
+ }
+
+ /**
+ * @param {string} string
+ * @return {?Element}
+ */
+ _tryFormatAsError(string) {
/**
- * @param {string} string
- * @return {?Element}
+ * @param {string} prefix
*/
- _tryFormatAsError: function(string)
- {
- /**
- * @param {string} prefix
- */
- function startsWith(prefix)
- {
- return string.startsWith(prefix);
- }
+ function startsWith(prefix) {
+ return string.startsWith(prefix);
+ }
- var errorPrefixes = ["EvalError", "ReferenceError", "SyntaxError", "TypeError", "RangeError", "Error", "URIError"];
- var target = this._target();
- if (!target || !errorPrefixes.some(startsWith))
- return null;
- var debuggerModel = WebInspector.DebuggerModel.fromTarget(target);
- if (!debuggerModel)
- return null;
-
- var lines = string.split("\n");
- var links = [];
- var position = 0;
- for (var i = 0; i < lines.length; ++i) {
- position += i > 0 ? lines[i - 1].length + 1 : 0;
- var isCallFrameLine = /^\s*at\s/.test(lines[i]);
- if (!isCallFrameLine && links.length)
- return null;
-
- if (!isCallFrameLine)
- continue;
-
- var openBracketIndex = -1;
- var closeBracketIndex = -1;
- var match = /\([^\)\(]+\)/.exec(lines[i]);
- if (match) {
- openBracketIndex = match.index;
- closeBracketIndex = match.index + match[0].length - 1;
- }
- var hasOpenBracket = openBracketIndex !== -1;
- var left = hasOpenBracket ? openBracketIndex + 1 : lines[i].indexOf("at") + 3;
- var right = hasOpenBracket ? closeBracketIndex : lines[i].length;
- var linkCandidate = lines[i].substring(left, right);
- var splitResult = WebInspector.ParsedURL.splitLineAndColumn(linkCandidate);
- if (!splitResult)
- return null;
-
- var parsed = splitResult.url.asParsedURL();
- var url;
- if (parsed)
- url = parsed.url;
- else if (debuggerModel.scriptsForSourceURL(splitResult.url).length)
- url = splitResult.url;
- else if (splitResult.url === "<anonymous>")
- continue;
- else
- return null;
-
- links.push({url: url, positionLeft: position + left, positionRight: position + right, lineNumber: splitResult.lineNumber, columnNumber: splitResult.columnNumber});
- }
+ var errorPrefixes = ['EvalError', 'ReferenceError', 'SyntaxError', 'TypeError', 'RangeError', 'Error', 'URIError'];
+ var target = this._target();
+ if (!target || !errorPrefixes.some(startsWith))
+ return null;
+ var debuggerModel = WebInspector.DebuggerModel.fromTarget(target);
+ if (!debuggerModel)
+ return null;
+
+ var lines = string.split('\n');
+ var links = [];
+ var position = 0;
+ for (var i = 0; i < lines.length; ++i) {
+ position += i > 0 ? lines[i - 1].length + 1 : 0;
+ var isCallFrameLine = /^\s*at\s/.test(lines[i]);
+ if (!isCallFrameLine && links.length)
+ return null;
+
+ if (!isCallFrameLine)
+ continue;
+
+ var openBracketIndex = -1;
+ var closeBracketIndex = -1;
+ var match = /\([^\)\(]+\)/.exec(lines[i]);
+ if (match) {
+ openBracketIndex = match.index;
+ closeBracketIndex = match.index + match[0].length - 1;
+ }
+ var hasOpenBracket = openBracketIndex !== -1;
+ var left = hasOpenBracket ? openBracketIndex + 1 : lines[i].indexOf('at') + 3;
+ var right = hasOpenBracket ? closeBracketIndex : lines[i].length;
+ var linkCandidate = lines[i].substring(left, right);
+ var splitResult = WebInspector.ParsedURL.splitLineAndColumn(linkCandidate);
+ if (!splitResult)
+ return null;
+
+ var parsed = splitResult.url.asParsedURL();
+ var url;
+ if (parsed)
+ url = parsed.url;
+ else if (debuggerModel.scriptsForSourceURL(splitResult.url).length)
+ url = splitResult.url;
+ else if (splitResult.url === '<anonymous>')
+ continue;
+ else
+ return null;
+
+ links.push({
+ url: url,
+ positionLeft: position + left,
+ positionRight: position + right,
+ lineNumber: splitResult.lineNumber,
+ columnNumber: splitResult.columnNumber
+ });
+ }
- if (!links.length)
- return null;
+ if (!links.length)
+ return null;
- var formattedResult = createElement("span");
- var start = 0;
- for (var i = 0; i < links.length; ++i) {
- formattedResult.appendChild(WebInspector.linkifyStringAsFragment(string.substring(start, links[i].positionLeft)));
- formattedResult.appendChild(this._linkifier.linkifyScriptLocation(target, null, links[i].url, links[i].lineNumber, links[i].columnNumber));
- start = links[i].positionRight;
- }
+ var formattedResult = createElement('span');
+ var start = 0;
+ for (var i = 0; i < links.length; ++i) {
+ formattedResult.appendChild(WebInspector.linkifyStringAsFragment(string.substring(start, links[i].positionLeft)));
+ formattedResult.appendChild(this._linkifier.linkifyScriptLocation(
+ target, null, links[i].url, links[i].lineNumber, links[i].columnNumber));
+ start = links[i].positionRight;
+ }
- if (start !== string.length)
- formattedResult.appendChild(WebInspector.linkifyStringAsFragment(string.substring(start)));
+ if (start !== string.length)
+ formattedResult.appendChild(WebInspector.linkifyStringAsFragment(string.substring(start)));
- return formattedResult;
- }
+ return formattedResult;
+ }
};
/**
- * @constructor
- * @extends {WebInspector.ConsoleViewMessage}
- * @param {!WebInspector.ConsoleMessage} consoleMessage
- * @param {!WebInspector.Linkifier} linkifier
- * @param {number} nestingLevel
+ * @unrestricted
*/
-WebInspector.ConsoleGroupViewMessage = function(consoleMessage, linkifier, nestingLevel)
-{
+WebInspector.ConsoleGroupViewMessage = class extends WebInspector.ConsoleViewMessage {
+ /**
+ * @param {!WebInspector.ConsoleMessage} consoleMessage
+ * @param {!WebInspector.Linkifier} linkifier
+ * @param {number} nestingLevel
+ */
+ constructor(consoleMessage, linkifier, nestingLevel) {
console.assert(consoleMessage.isGroupStartMessage());
- WebInspector.ConsoleViewMessage.call(this, consoleMessage, linkifier, nestingLevel);
+ super(consoleMessage, linkifier, nestingLevel);
this.setCollapsed(consoleMessage.type === WebInspector.ConsoleMessage.MessageType.StartGroupCollapsed);
-};
-
-WebInspector.ConsoleGroupViewMessage.prototype = {
- /**
- * @param {boolean} collapsed
- */
- setCollapsed: function(collapsed)
- {
- this._collapsed = collapsed;
- if (this._element)
- this._element.classList.toggle("collapsed", this._collapsed);
- },
-
- /**
- * @return {boolean}
- */
- collapsed: function()
- {
- return this._collapsed;
- },
-
- /**
- * @override
- * @return {!Element}
- */
- toMessageElement: function()
- {
- if (!this._element) {
- WebInspector.ConsoleViewMessage.prototype.toMessageElement.call(this);
- this._element.classList.toggle("collapsed", this._collapsed);
- }
- return this._element;
- },
-
- __proto__: WebInspector.ConsoleViewMessage.prototype
+ }
+
+ /**
+ * @param {boolean} collapsed
+ */
+ setCollapsed(collapsed) {
+ this._collapsed = collapsed;
+ if (this._element)
+ this._element.classList.toggle('collapsed', this._collapsed);
+ }
+
+ /**
+ * @return {boolean}
+ */
+ collapsed() {
+ return this._collapsed;
+ }
+
+ /**
+ * @override
+ * @return {!Element}
+ */
+ toMessageElement() {
+ if (!this._element) {
+ super.toMessageElement();
+ this._element.classList.toggle('collapsed', this._collapsed);
+ }
+ return this._element;
+ }
};

Powered by Google App Engine
This is Rietveld 408576698