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

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

Issue 2493373002: DevTools: rename WebInspector into modules. (Closed)
Patch Set: for bots 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 3 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
4 * Copyright (C) 2009 Joseph Pecoraro 4 * Copyright (C) 2009 Joseph Pecoraro
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 9 *
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 10 matching lines...) Expand all
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 /** 30 /**
31 * @implements {WebInspector.ViewportElement} 31 * @implements {UI.ViewportElement}
32 * @unrestricted 32 * @unrestricted
33 */ 33 */
34 WebInspector.ConsoleViewMessage = class { 34 Console.ConsoleViewMessage = class {
35 /** 35 /**
36 * @param {!WebInspector.ConsoleMessage} consoleMessage 36 * @param {!SDK.ConsoleMessage} consoleMessage
37 * @param {!WebInspector.Linkifier} linkifier 37 * @param {!Components.Linkifier} linkifier
38 * @param {number} nestingLevel 38 * @param {number} nestingLevel
39 */ 39 */
40 constructor(consoleMessage, linkifier, nestingLevel) { 40 constructor(consoleMessage, linkifier, nestingLevel) {
41 this._message = consoleMessage; 41 this._message = consoleMessage;
42 this._linkifier = linkifier; 42 this._linkifier = linkifier;
43 this._repeatCount = 1; 43 this._repeatCount = 1;
44 this._closeGroupDecorationCount = 0; 44 this._closeGroupDecorationCount = 0;
45 this._nestingLevel = nestingLevel; 45 this._nestingLevel = nestingLevel;
46 46
47 /** @type {?WebInspector.DataGrid} */ 47 /** @type {?UI.DataGrid} */
48 this._dataGrid = null; 48 this._dataGrid = null;
49 this._previewFormatter = new WebInspector.RemoteObjectPreviewFormatter(); 49 this._previewFormatter = new Components.RemoteObjectPreviewFormatter();
50 this._searchRegex = null; 50 this._searchRegex = null;
51 } 51 }
52 52
53 /** 53 /**
54 * @return {?WebInspector.Target} 54 * @return {?SDK.Target}
55 */ 55 */
56 _target() { 56 _target() {
57 return this.consoleMessage().target(); 57 return this.consoleMessage().target();
58 } 58 }
59 59
60 /** 60 /**
61 * @override 61 * @override
62 * @return {!Element} 62 * @return {!Element}
63 */ 63 */
64 element() { 64 element() {
(...skipping 26 matching lines...) Expand all
91 91
92 /** 92 /**
93 * @return {number} 93 * @return {number}
94 */ 94 */
95 fastHeight() { 95 fastHeight() {
96 if (this._cachedHeight) 96 if (this._cachedHeight)
97 return this._cachedHeight; 97 return this._cachedHeight;
98 // This value reflects the 18px min-height of .console-message, plus the 98 // This value reflects the 18px min-height of .console-message, plus the
99 // 1px border of .console-message-wrapper. Keep in sync with consoleView.css . 99 // 1px border of .console-message-wrapper. Keep in sync with consoleView.css .
100 const defaultConsoleRowHeight = 19; 100 const defaultConsoleRowHeight = 19;
101 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table) { 101 if (this._message.type === SDK.ConsoleMessage.MessageType.Table) {
102 var table = this._message.parameters[0]; 102 var table = this._message.parameters[0];
103 if (table && table.preview) 103 if (table && table.preview)
104 return defaultConsoleRowHeight * table.preview.properties.length; 104 return defaultConsoleRowHeight * table.preview.properties.length;
105 } 105 }
106 return defaultConsoleRowHeight; 106 return defaultConsoleRowHeight;
107 } 107 }
108 108
109 /** 109 /**
110 * @return {!WebInspector.ConsoleMessage} 110 * @return {!SDK.ConsoleMessage}
111 */ 111 */
112 consoleMessage() { 112 consoleMessage() {
113 return this._message; 113 return this._message;
114 } 114 }
115 115
116 /** 116 /**
117 * @param {!WebInspector.ConsoleMessage} consoleMessage 117 * @param {!SDK.ConsoleMessage} consoleMessage
118 * @return {!Element} 118 * @return {!Element}
119 */ 119 */
120 _buildTableMessage(consoleMessage) { 120 _buildTableMessage(consoleMessage) {
121 var formattedMessage = createElement('span'); 121 var formattedMessage = createElement('span');
122 WebInspector.appendStyle(formattedMessage, 'components/objectValue.css'); 122 UI.appendStyle(formattedMessage, 'components/objectValue.css');
123 formattedMessage.className = 'source-code'; 123 formattedMessage.className = 'source-code';
124 var anchorElement = this._buildMessageAnchor(consoleMessage); 124 var anchorElement = this._buildMessageAnchor(consoleMessage);
125 if (anchorElement) 125 if (anchorElement)
126 formattedMessage.appendChild(anchorElement); 126 formattedMessage.appendChild(anchorElement);
127 127
128 var table = consoleMessage.parameters && consoleMessage.parameters.length ? consoleMessage.parameters[0] : null; 128 var table = consoleMessage.parameters && consoleMessage.parameters.length ? consoleMessage.parameters[0] : null;
129 if (table) 129 if (table)
130 table = this._parameterToRemoteObject(table, this._target()); 130 table = this._parameterToRemoteObject(table, this._target());
131 if (!table || !table.preview) 131 if (!table || !table.preview)
132 return formattedMessage; 132 return formattedMessage;
(...skipping 29 matching lines...) Expand all
162 } 162 }
163 163
164 var flatValues = []; 164 var flatValues = [];
165 for (var i = 0; i < rows.length; ++i) { 165 for (var i = 0; i < rows.length; ++i) {
166 var rowName = rows[i][0]; 166 var rowName = rows[i][0];
167 var rowValue = rows[i][1]; 167 var rowValue = rows[i][1];
168 flatValues.push(rowName); 168 flatValues.push(rowName);
169 for (var j = 0; j < columnNames.length; ++j) 169 for (var j = 0; j < columnNames.length; ++j)
170 flatValues.push(rowValue[columnNames[j]]); 170 flatValues.push(rowValue[columnNames[j]]);
171 } 171 }
172 columnNames.unshift(WebInspector.UIString('(index)')); 172 columnNames.unshift(Common.UIString('(index)'));
173 173
174 if (flatValues.length) { 174 if (flatValues.length) {
175 this._dataGrid = WebInspector.SortableDataGrid.create(columnNames, flatVal ues); 175 this._dataGrid = UI.SortableDataGrid.create(columnNames, flatValues);
176 176
177 var formattedResult = createElementWithClass('span', 'console-message-text '); 177 var formattedResult = createElementWithClass('span', 'console-message-text ');
178 var tableElement = formattedResult.createChild('div', 'console-message-for matted-table'); 178 var tableElement = formattedResult.createChild('div', 'console-message-for matted-table');
179 var dataGridContainer = tableElement.createChild('span'); 179 var dataGridContainer = tableElement.createChild('span');
180 tableElement.appendChild(this._formatParameter(table, true, false)); 180 tableElement.appendChild(this._formatParameter(table, true, false));
181 dataGridContainer.appendChild(this._dataGrid.element); 181 dataGridContainer.appendChild(this._dataGrid.element);
182 formattedMessage.appendChild(formattedResult); 182 formattedMessage.appendChild(formattedResult);
183 this._dataGrid.renderInline(); 183 this._dataGrid.renderInline();
184 } 184 }
185 return formattedMessage; 185 return formattedMessage;
186 } 186 }
187 187
188 /** 188 /**
189 * @param {!WebInspector.ConsoleMessage} consoleMessage 189 * @param {!SDK.ConsoleMessage} consoleMessage
190 * @return {!Element} 190 * @return {!Element}
191 */ 191 */
192 _buildMessage(consoleMessage) { 192 _buildMessage(consoleMessage) {
193 var messageElement; 193 var messageElement;
194 var messageText = consoleMessage.messageText; 194 var messageText = consoleMessage.messageText;
195 if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.Cons oleAPI) { 195 if (consoleMessage.source === SDK.ConsoleMessage.MessageSource.ConsoleAPI) {
196 switch (consoleMessage.type) { 196 switch (consoleMessage.type) {
197 case WebInspector.ConsoleMessage.MessageType.Trace: 197 case SDK.ConsoleMessage.MessageType.Trace:
198 messageElement = this._format(consoleMessage.parameters || ['console.t race']); 198 messageElement = this._format(consoleMessage.parameters || ['console.t race']);
199 break; 199 break;
200 case WebInspector.ConsoleMessage.MessageType.Clear: 200 case SDK.ConsoleMessage.MessageType.Clear:
201 messageElement = createElementWithClass('span', 'console-info'); 201 messageElement = createElementWithClass('span', 'console-info');
202 messageElement.textContent = WebInspector.UIString('Console was cleare d'); 202 messageElement.textContent = Common.UIString('Console was cleared');
203 break; 203 break;
204 case WebInspector.ConsoleMessage.MessageType.Assert: 204 case SDK.ConsoleMessage.MessageType.Assert:
205 var args = [WebInspector.UIString('Assertion failed:')]; 205 var args = [Common.UIString('Assertion failed:')];
206 if (consoleMessage.parameters) 206 if (consoleMessage.parameters)
207 args = args.concat(consoleMessage.parameters); 207 args = args.concat(consoleMessage.parameters);
208 messageElement = this._format(args); 208 messageElement = this._format(args);
209 break; 209 break;
210 case WebInspector.ConsoleMessage.MessageType.Dir: 210 case SDK.ConsoleMessage.MessageType.Dir:
211 var obj = consoleMessage.parameters ? consoleMessage.parameters[0] : u ndefined; 211 var obj = consoleMessage.parameters ? consoleMessage.parameters[0] : u ndefined;
212 var args = ['%O', obj]; 212 var args = ['%O', obj];
213 messageElement = this._format(args); 213 messageElement = this._format(args);
214 break; 214 break;
215 case WebInspector.ConsoleMessage.MessageType.Profile: 215 case SDK.ConsoleMessage.MessageType.Profile:
216 case WebInspector.ConsoleMessage.MessageType.ProfileEnd: 216 case SDK.ConsoleMessage.MessageType.ProfileEnd:
217 messageElement = this._format([messageText]); 217 messageElement = this._format([messageText]);
218 break; 218 break;
219 default: 219 default:
220 if (consoleMessage.parameters && consoleMessage.parameters.length === 1 && 220 if (consoleMessage.parameters && consoleMessage.parameters.length === 1 &&
221 consoleMessage.parameters[0].type === 'string') 221 consoleMessage.parameters[0].type === 'string')
222 messageElement = this._tryFormatAsError(/** @type {string} */ (conso leMessage.parameters[0].value)); 222 messageElement = this._tryFormatAsError(/** @type {string} */ (conso leMessage.parameters[0].value));
223 var args = consoleMessage.parameters || [messageText]; 223 var args = consoleMessage.parameters || [messageText];
224 messageElement = messageElement || this._format(args); 224 messageElement = messageElement || this._format(args);
225 } 225 }
226 } else if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSour ce.Network) { 226 } else if (consoleMessage.source === SDK.ConsoleMessage.MessageSource.Networ k) {
227 if (consoleMessage.request) { 227 if (consoleMessage.request) {
228 messageElement = createElement('span'); 228 messageElement = createElement('span');
229 if (consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Er ror || 229 if (consoleMessage.level === SDK.ConsoleMessage.MessageLevel.Error ||
230 consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Re vokedError) { 230 consoleMessage.level === SDK.ConsoleMessage.MessageLevel.RevokedErro r) {
231 messageElement.createTextChild(consoleMessage.request.requestMethod + ' '); 231 messageElement.createTextChild(consoleMessage.request.requestMethod + ' ');
232 messageElement.appendChild(WebInspector.Linkifier.linkifyUsingRevealer ( 232 messageElement.appendChild(Components.Linkifier.linkifyUsingRevealer(
233 consoleMessage.request, consoleMessage.request.url, consoleMessage .request.url)); 233 consoleMessage.request, consoleMessage.request.url, consoleMessage .request.url));
234 if (consoleMessage.request.failed) 234 if (consoleMessage.request.failed)
235 messageElement.createTextChildren(' ', consoleMessage.request.locali zedFailDescription); 235 messageElement.createTextChildren(' ', consoleMessage.request.locali zedFailDescription);
236 else 236 else
237 messageElement.createTextChildren( 237 messageElement.createTextChildren(
238 ' ', String(consoleMessage.request.statusCode), ' (', consoleMes sage.request.statusText, ')'); 238 ' ', String(consoleMessage.request.statusCode), ' (', consoleMes sage.request.statusText, ')');
239 } else { 239 } else {
240 var fragment = WebInspector.linkifyStringAsFragmentWithCustomLinkifier ( 240 var fragment = Components.linkifyStringAsFragmentWithCustomLinkifier(
241 messageText, linkifyRequest.bind(consoleMessage)); 241 messageText, linkifyRequest.bind(consoleMessage));
242 messageElement.appendChild(fragment); 242 messageElement.appendChild(fragment);
243 } 243 }
244 } else { 244 } else {
245 messageElement = this._format([messageText]); 245 messageElement = this._format([messageText]);
246 } 246 }
247 } else { 247 } else {
248 if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.Vi olation) 248 if (consoleMessage.source === SDK.ConsoleMessage.MessageSource.Violation)
249 messageText = WebInspector.UIString('[Violation] %s', messageText); 249 messageText = Common.UIString('[Violation] %s', messageText);
250 var args = consoleMessage.parameters || [messageText]; 250 var args = consoleMessage.parameters || [messageText];
251 messageElement = this._format(args); 251 messageElement = this._format(args);
252 } 252 }
253 messageElement.classList.add('console-message-text'); 253 messageElement.classList.add('console-message-text');
254 254
255 var formattedMessage = createElement('span'); 255 var formattedMessage = createElement('span');
256 WebInspector.appendStyle(formattedMessage, 'components/objectValue.css'); 256 UI.appendStyle(formattedMessage, 'components/objectValue.css');
257 formattedMessage.className = 'source-code'; 257 formattedMessage.className = 'source-code';
258 258
259 var anchorElement = this._buildMessageAnchor(consoleMessage); 259 var anchorElement = this._buildMessageAnchor(consoleMessage);
260 if (anchorElement) 260 if (anchorElement)
261 formattedMessage.appendChild(anchorElement); 261 formattedMessage.appendChild(anchorElement);
262 formattedMessage.appendChild(messageElement); 262 formattedMessage.appendChild(messageElement);
263 return formattedMessage; 263 return formattedMessage;
264 264
265 /** 265 /**
266 * @param {string} title 266 * @param {string} title
267 * @return {!Element} 267 * @return {!Element}
268 * @this {WebInspector.ConsoleMessage} 268 * @this {SDK.ConsoleMessage}
269 */ 269 */
270 function linkifyRequest(title) { 270 function linkifyRequest(title) {
271 return WebInspector.Linkifier.linkifyUsingRevealer( 271 return Components.Linkifier.linkifyUsingRevealer(
272 /** @type {!WebInspector.NetworkRequest} */ (this.request), title, thi s.request.url); 272 /** @type {!SDK.NetworkRequest} */ (this.request), title, this.request .url);
273 } 273 }
274 } 274 }
275 275
276 /** 276 /**
277 * @param {!WebInspector.ConsoleMessage} consoleMessage 277 * @param {!SDK.ConsoleMessage} consoleMessage
278 * @return {?Element} 278 * @return {?Element}
279 */ 279 */
280 _buildMessageAnchor(consoleMessage) { 280 _buildMessageAnchor(consoleMessage) {
281 var anchorElement = null; 281 var anchorElement = null;
282 if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource.Netw ork || consoleMessage.request) { 282 if (consoleMessage.source !== SDK.ConsoleMessage.MessageSource.Network || co nsoleMessage.request) {
283 if (consoleMessage.scriptId) 283 if (consoleMessage.scriptId)
284 anchorElement = this._linkifyScriptId( 284 anchorElement = this._linkifyScriptId(
285 consoleMessage.scriptId, consoleMessage.url || '', consoleMessage.li ne, consoleMessage.column); 285 consoleMessage.scriptId, consoleMessage.url || '', consoleMessage.li ne, consoleMessage.column);
286 else if (consoleMessage.stackTrace && consoleMessage.stackTrace.callFrames .length) 286 else if (consoleMessage.stackTrace && consoleMessage.stackTrace.callFrames .length)
287 anchorElement = this._linkifyStackTraceTopFrame(consoleMessage.stackTrac e); 287 anchorElement = this._linkifyStackTraceTopFrame(consoleMessage.stackTrac e);
288 else if (consoleMessage.url && consoleMessage.url !== 'undefined') 288 else if (consoleMessage.url && consoleMessage.url !== 'undefined')
289 anchorElement = this._linkifyLocation(consoleMessage.url, consoleMessage .line, consoleMessage.column); 289 anchorElement = this._linkifyLocation(consoleMessage.url, consoleMessage .line, consoleMessage.column);
290 } else if (consoleMessage.url) { 290 } else if (consoleMessage.url) {
291 var url = consoleMessage.url; 291 var url = consoleMessage.url;
292 var isExternal = 292 var isExternal =
293 !WebInspector.resourceForURL(url) && !WebInspector.networkMapping.uiSo urceCodeForURLForAnyTarget(url); 293 !Bindings.resourceForURL(url) && !Bindings.networkMapping.uiSourceCode ForURLForAnyTarget(url);
294 anchorElement = WebInspector.linkifyURLAsNode(url, url, 'console-message-u rl', isExternal); 294 anchorElement = UI.linkifyURLAsNode(url, url, 'console-message-url', isExt ernal);
295 } 295 }
296 296
297 // Append a space to prevent the anchor text from being glued to the console message when the user selects and copies the console messages. 297 // Append a space to prevent the anchor text from being glued to the console message when the user selects and copies the console messages.
298 if (anchorElement) 298 if (anchorElement)
299 anchorElement.appendChild(createTextNode(' ')); 299 anchorElement.appendChild(createTextNode(' '));
300 return anchorElement; 300 return anchorElement;
301 } 301 }
302 302
303 /** 303 /**
304 * @param {!WebInspector.ConsoleMessage} consoleMessage 304 * @param {!SDK.ConsoleMessage} consoleMessage
305 * @param {!WebInspector.Target} target 305 * @param {!SDK.Target} target
306 * @param {!WebInspector.Linkifier} linkifier 306 * @param {!Components.Linkifier} linkifier
307 * @return {!Element} 307 * @return {!Element}
308 */ 308 */
309 _buildMessageWithStackTrace(consoleMessage, target, linkifier) { 309 _buildMessageWithStackTrace(consoleMessage, target, linkifier) {
310 var toggleElement = createElementWithClass('div', 'console-message-stack-tra ce-toggle'); 310 var toggleElement = createElementWithClass('div', 'console-message-stack-tra ce-toggle');
311 var contentElement = toggleElement.createChild('div', 'console-message-stack -trace-wrapper'); 311 var contentElement = toggleElement.createChild('div', 'console-message-stack -trace-wrapper');
312 312
313 var messageElement = this._buildMessage(consoleMessage); 313 var messageElement = this._buildMessage(consoleMessage);
314 var clickableElement = contentElement.createChild('div'); 314 var clickableElement = contentElement.createChild('div');
315 clickableElement.appendChild(messageElement); 315 clickableElement.appendChild(messageElement);
316 var stackTraceElement = contentElement.createChild('div'); 316 var stackTraceElement = contentElement.createChild('div');
317 var stackTracePreview = 317 var stackTracePreview =
318 WebInspector.DOMPresentationUtils.buildStackTracePreviewContents(target, linkifier, consoleMessage.stackTrace); 318 Components.DOMPresentationUtils.buildStackTracePreviewContents(target, l inkifier, consoleMessage.stackTrace);
319 stackTraceElement.appendChild(stackTracePreview); 319 stackTraceElement.appendChild(stackTracePreview);
320 stackTraceElement.classList.add('hidden'); 320 stackTraceElement.classList.add('hidden');
321 321
322 /** 322 /**
323 * @param {boolean} expand 323 * @param {boolean} expand
324 */ 324 */
325 function expandStackTrace(expand) { 325 function expandStackTrace(expand) {
326 stackTraceElement.classList.toggle('hidden', !expand); 326 stackTraceElement.classList.toggle('hidden', !expand);
327 toggleElement.classList.toggle('expanded', expand); 327 toggleElement.classList.toggle('expanded', expand);
328 } 328 }
329 329
330 /** 330 /**
331 * @param {?Event} event 331 * @param {?Event} event
332 */ 332 */
333 function toggleStackTrace(event) { 333 function toggleStackTrace(event) {
334 var linkClicked = event.target && event.target.enclosingNodeOrSelfWithNode Name('a'); 334 var linkClicked = event.target && event.target.enclosingNodeOrSelfWithNode Name('a');
335 if (event.target.hasSelection() || linkClicked) 335 if (event.target.hasSelection() || linkClicked)
336 return; 336 return;
337 expandStackTrace(stackTraceElement.classList.contains('hidden')); 337 expandStackTrace(stackTraceElement.classList.contains('hidden'));
338 event.consume(); 338 event.consume();
339 } 339 }
340 340
341 clickableElement.addEventListener('click', toggleStackTrace, false); 341 clickableElement.addEventListener('click', toggleStackTrace, false);
342 if (consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trace) 342 if (consoleMessage.type === SDK.ConsoleMessage.MessageType.Trace)
343 expandStackTrace(true); 343 expandStackTrace(true);
344 344
345 toggleElement._expandStackTraceForTest = expandStackTrace.bind(null, true); 345 toggleElement._expandStackTraceForTest = expandStackTrace.bind(null, true);
346 return toggleElement; 346 return toggleElement;
347 } 347 }
348 348
349 /** 349 /**
350 * @param {string} url 350 * @param {string} url
351 * @param {number} lineNumber 351 * @param {number} lineNumber
352 * @param {number} columnNumber 352 * @param {number} columnNumber
(...skipping 26 matching lines...) Expand all
379 */ 379 */
380 _linkifyScriptId(scriptId, url, lineNumber, columnNumber) { 380 _linkifyScriptId(scriptId, url, lineNumber, columnNumber) {
381 var target = this._target(); 381 var target = this._target();
382 if (!target) 382 if (!target)
383 return null; 383 return null;
384 return this._linkifier.linkifyScriptLocation( 384 return this._linkifier.linkifyScriptLocation(
385 target, scriptId, url, lineNumber, columnNumber, 'console-message-url'); 385 target, scriptId, url, lineNumber, columnNumber, 'console-message-url');
386 } 386 }
387 387
388 /** 388 /**
389 * @param {!WebInspector.RemoteObject|!Object|string} parameter 389 * @param {!SDK.RemoteObject|!Object|string} parameter
390 * @param {?WebInspector.Target} target 390 * @param {?SDK.Target} target
391 * @return {!WebInspector.RemoteObject} 391 * @return {!SDK.RemoteObject}
392 */ 392 */
393 _parameterToRemoteObject(parameter, target) { 393 _parameterToRemoteObject(parameter, target) {
394 if (parameter instanceof WebInspector.RemoteObject) 394 if (parameter instanceof SDK.RemoteObject)
395 return parameter; 395 return parameter;
396 if (!target) 396 if (!target)
397 return WebInspector.RemoteObject.fromLocalObject(parameter); 397 return SDK.RemoteObject.fromLocalObject(parameter);
398 if (typeof parameter === 'object') 398 if (typeof parameter === 'object')
399 return target.runtimeModel.createRemoteObject(parameter); 399 return target.runtimeModel.createRemoteObject(parameter);
400 return target.runtimeModel.createRemoteObjectFromPrimitiveValue(parameter); 400 return target.runtimeModel.createRemoteObjectFromPrimitiveValue(parameter);
401 } 401 }
402 402
403 /** 403 /**
404 * @param {!Array.<!WebInspector.RemoteObject|string>} parameters 404 * @param {!Array.<!SDK.RemoteObject|string>} parameters
405 * @return {!Element} 405 * @return {!Element}
406 */ 406 */
407 _format(parameters) { 407 _format(parameters) {
408 // This node is used like a Builder. Values are continually appended onto it . 408 // This node is used like a Builder. Values are continually appended onto it .
409 var formattedResult = createElement('span'); 409 var formattedResult = createElement('span');
410 if (!parameters.length) 410 if (!parameters.length)
411 return formattedResult; 411 return formattedResult;
412 412
413 // Formatting code below assumes that parameters are all wrappers whereas fr ontend console 413 // Formatting code below assumes that parameters are all wrappers whereas fr ontend console
414 // API allows passing arbitrary values as messages (strings, numbers, etc.). Wrap them here. 414 // API allows passing arbitrary values as messages (strings, numbers, etc.). Wrap them here.
415 // FIXME: Only pass runtime wrappers here. 415 // FIXME: Only pass runtime wrappers here.
416 for (var i = 0; i < parameters.length; ++i) 416 for (var i = 0; i < parameters.length; ++i)
417 parameters[i] = this._parameterToRemoteObject(parameters[i], this._target( )); 417 parameters[i] = this._parameterToRemoteObject(parameters[i], this._target( ));
418 418
419 // There can be string log and string eval result. We distinguish between th em based on message type. 419 // There can be string log and string eval result. We distinguish between th em based on message type.
420 var shouldFormatMessage = WebInspector.RemoteObject.type( 420 var shouldFormatMessage = SDK.RemoteObject.type(
421 (/** @type {!Array.<!WebInspector.RemoteObject >} **/ (parameters))[0]) === 'string' && 421 (/** @type {!Array.<!SDK.RemoteObject>} **/ (p arameters))[0]) === 'string' &&
422 (this._message.type !== WebInspector.ConsoleMessage.MessageType.Result | | 422 (this._message.type !== SDK.ConsoleMessage.MessageType.Result ||
423 this._message.level === WebInspector.ConsoleMessage.MessageLevel.Error || 423 this._message.level === SDK.ConsoleMessage.MessageLevel.Error ||
424 this._message.level === WebInspector.ConsoleMessage.MessageLevel.Revoke dError); 424 this._message.level === SDK.ConsoleMessage.MessageLevel.RevokedError);
425 425
426 // Multiple parameters with the first being a format string. Save unused sub stitutions. 426 // Multiple parameters with the first being a format string. Save unused sub stitutions.
427 if (shouldFormatMessage) { 427 if (shouldFormatMessage) {
428 var result = this._formatWithSubstitutionString( 428 var result = this._formatWithSubstitutionString(
429 /** @type {string} **/ (parameters[0].description), parameters.slice(1 ), formattedResult); 429 /** @type {string} **/ (parameters[0].description), parameters.slice(1 ), formattedResult);
430 parameters = result.unusedSubstitutions; 430 parameters = result.unusedSubstitutions;
431 if (parameters.length) 431 if (parameters.length)
432 formattedResult.createTextChild(' '); 432 formattedResult.createTextChild(' ');
433 } 433 }
434 434
435 // Single parameter, or unused substitutions from above. 435 // Single parameter, or unused substitutions from above.
436 for (var i = 0; i < parameters.length; ++i) { 436 for (var i = 0; i < parameters.length; ++i) {
437 // Inline strings when formatting. 437 // Inline strings when formatting.
438 if (shouldFormatMessage && parameters[i].type === 'string') 438 if (shouldFormatMessage && parameters[i].type === 'string')
439 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(paramet ers[i].description)); 439 formattedResult.appendChild(Components.linkifyStringAsFragment(parameter s[i].description));
440 else 440 else
441 formattedResult.appendChild(this._formatParameter(parameters[i], false, true)); 441 formattedResult.appendChild(this._formatParameter(parameters[i], false, true));
442 if (i < parameters.length - 1) 442 if (i < parameters.length - 1)
443 formattedResult.createTextChild(' '); 443 formattedResult.createTextChild(' ');
444 } 444 }
445 return formattedResult; 445 return formattedResult;
446 } 446 }
447 447
448 /** 448 /**
449 * @param {!WebInspector.RemoteObject} output 449 * @param {!SDK.RemoteObject} output
450 * @param {boolean=} forceObjectFormat 450 * @param {boolean=} forceObjectFormat
451 * @param {boolean=} includePreview 451 * @param {boolean=} includePreview
452 * @return {!Element} 452 * @return {!Element}
453 */ 453 */
454 _formatParameter(output, forceObjectFormat, includePreview) { 454 _formatParameter(output, forceObjectFormat, includePreview) {
455 if (output.customPreview()) 455 if (output.customPreview())
456 return (new WebInspector.CustomPreviewComponent(output)).element; 456 return (new Components.CustomPreviewComponent(output)).element;
457 457
458 var type = forceObjectFormat ? 'object' : (output.subtype || output.type); 458 var type = forceObjectFormat ? 'object' : (output.subtype || output.type);
459 var element; 459 var element;
460 switch (type) { 460 switch (type) {
461 case 'array': 461 case 'array':
462 case 'typedarray': 462 case 'typedarray':
463 element = this._formatParameterAsArray(output); 463 element = this._formatParameterAsArray(output);
464 break; 464 break;
465 case 'error': 465 case 'error':
466 element = this._formatParameterAsError(output); 466 element = this._formatParameterAsError(output);
(...skipping 28 matching lines...) Expand all
495 default: 495 default:
496 element = this._formatParameterAsValue(output); 496 element = this._formatParameterAsValue(output);
497 console.error('Tried to format remote object of unknown type.'); 497 console.error('Tried to format remote object of unknown type.');
498 } 498 }
499 element.classList.add('object-value-' + type); 499 element.classList.add('object-value-' + type);
500 element.classList.add('source-code'); 500 element.classList.add('source-code');
501 return element; 501 return element;
502 } 502 }
503 503
504 /** 504 /**
505 * @param {!WebInspector.RemoteObject} obj 505 * @param {!SDK.RemoteObject} obj
506 * @return {!Element} 506 * @return {!Element}
507 */ 507 */
508 _formatParameterAsValue(obj) { 508 _formatParameterAsValue(obj) {
509 var result = createElement('span'); 509 var result = createElement('span');
510 result.createTextChild(obj.description || ''); 510 result.createTextChild(obj.description || '');
511 if (obj.objectId) 511 if (obj.objectId)
512 result.addEventListener('contextmenu', this._contextMenuEventFired.bind(th is, obj), false); 512 result.addEventListener('contextmenu', this._contextMenuEventFired.bind(th is, obj), false);
513 return result; 513 return result;
514 } 514 }
515 515
516 /** 516 /**
517 * @param {!WebInspector.RemoteObject} obj 517 * @param {!SDK.RemoteObject} obj
518 * @param {boolean=} includePreview 518 * @param {boolean=} includePreview
519 * @return {!Element} 519 * @return {!Element}
520 */ 520 */
521 _formatParameterAsObject(obj, includePreview) { 521 _formatParameterAsObject(obj, includePreview) {
522 var titleElement = createElement('span'); 522 var titleElement = createElement('span');
523 if (includePreview && obj.preview) { 523 if (includePreview && obj.preview) {
524 titleElement.classList.add('console-object-preview'); 524 titleElement.classList.add('console-object-preview');
525 this._previewFormatter.appendObjectPreview(titleElement, obj.preview); 525 this._previewFormatter.appendObjectPreview(titleElement, obj.preview);
526 } else if (obj.type === 'function') { 526 } else if (obj.type === 'function') {
527 WebInspector.ObjectPropertiesSection.formatObjectAsFunction(obj, titleElem ent, false); 527 Components.ObjectPropertiesSection.formatObjectAsFunction(obj, titleElemen t, false);
528 titleElement.classList.add('object-value-function'); 528 titleElement.classList.add('object-value-function');
529 } else { 529 } else {
530 titleElement.createTextChild(obj.description || ''); 530 titleElement.createTextChild(obj.description || '');
531 } 531 }
532 532
533 var section = new WebInspector.ObjectPropertiesSection(obj, titleElement, th is._linkifier); 533 var section = new Components.ObjectPropertiesSection(obj, titleElement, this ._linkifier);
534 section.element.classList.add('console-view-object-properties-section'); 534 section.element.classList.add('console-view-object-properties-section');
535 section.enableContextMenu(); 535 section.enableContextMenu();
536 return section.element; 536 return section.element;
537 } 537 }
538 538
539 /** 539 /**
540 * @param {!WebInspector.RemoteObject} func 540 * @param {!SDK.RemoteObject} func
541 * @param {boolean=} includePreview 541 * @param {boolean=} includePreview
542 * @return {!Element} 542 * @return {!Element}
543 */ 543 */
544 _formatParameterAsFunction(func, includePreview) { 544 _formatParameterAsFunction(func, includePreview) {
545 var result = createElement('span'); 545 var result = createElement('span');
546 WebInspector.RemoteFunction.objectAsFunction(func).targetFunction().then(for matTargetFunction.bind(this)); 546 SDK.RemoteFunction.objectAsFunction(func).targetFunction().then(formatTarget Function.bind(this));
547 return result; 547 return result;
548 548
549 /** 549 /**
550 * @param {!WebInspector.RemoteObject} targetFunction 550 * @param {!SDK.RemoteObject} targetFunction
551 * @this {WebInspector.ConsoleViewMessage} 551 * @this {Console.ConsoleViewMessage}
552 */ 552 */
553 function formatTargetFunction(targetFunction) { 553 function formatTargetFunction(targetFunction) {
554 var functionElement = createElement('span'); 554 var functionElement = createElement('span');
555 WebInspector.ObjectPropertiesSection.formatObjectAsFunction( 555 Components.ObjectPropertiesSection.formatObjectAsFunction(
556 targetFunction, functionElement, true, includePreview); 556 targetFunction, functionElement, true, includePreview);
557 result.appendChild(functionElement); 557 result.appendChild(functionElement);
558 if (targetFunction !== func) { 558 if (targetFunction !== func) {
559 var note = result.createChild('span', 'object-info-state-note'); 559 var note = result.createChild('span', 'object-info-state-note');
560 note.title = WebInspector.UIString('Function was resolved from bound fun ction.'); 560 note.title = Common.UIString('Function was resolved from bound function. ');
561 } 561 }
562 result.addEventListener('contextmenu', this._contextMenuEventFired.bind(th is, targetFunction), false); 562 result.addEventListener('contextmenu', this._contextMenuEventFired.bind(th is, targetFunction), false);
563 } 563 }
564 } 564 }
565 565
566 /** 566 /**
567 * @param {!WebInspector.RemoteObject} obj 567 * @param {!SDK.RemoteObject} obj
568 * @param {!Event} event 568 * @param {!Event} event
569 */ 569 */
570 _contextMenuEventFired(obj, event) { 570 _contextMenuEventFired(obj, event) {
571 var contextMenu = new WebInspector.ContextMenu(event); 571 var contextMenu = new UI.ContextMenu(event);
572 contextMenu.appendApplicableItems(obj); 572 contextMenu.appendApplicableItems(obj);
573 contextMenu.show(); 573 contextMenu.show();
574 } 574 }
575 575
576 /** 576 /**
577 * @param {?WebInspector.RemoteObject} object 577 * @param {?SDK.RemoteObject} object
578 * @param {!Array.<!Protocol.Runtime.PropertyPreview>} propertyPath 578 * @param {!Array.<!Protocol.Runtime.PropertyPreview>} propertyPath
579 * @return {!Element} 579 * @return {!Element}
580 */ 580 */
581 _renderPropertyPreviewOrAccessor(object, propertyPath) { 581 _renderPropertyPreviewOrAccessor(object, propertyPath) {
582 var property = propertyPath.peekLast(); 582 var property = propertyPath.peekLast();
583 if (property.type === 'accessor') 583 if (property.type === 'accessor')
584 return this._formatAsAccessorProperty(object, propertyPath.map(property => property.name), false); 584 return this._formatAsAccessorProperty(object, propertyPath.map(property => property.name), false);
585 return this._previewFormatter.renderPropertyPreview( 585 return this._previewFormatter.renderPropertyPreview(
586 property.type, /** @type {string} */ (property.subtype), property.value) ; 586 property.type, /** @type {string} */ (property.subtype), property.value) ;
587 } 587 }
588 588
589 /** 589 /**
590 * @param {!WebInspector.RemoteObject} object 590 * @param {!SDK.RemoteObject} object
591 * @return {!Element} 591 * @return {!Element}
592 */ 592 */
593 _formatParameterAsNode(object) { 593 _formatParameterAsNode(object) {
594 var result = createElement('span'); 594 var result = createElement('span');
595 WebInspector.Renderer.renderPromise(object).then(appendRenderer.bind(this), failedToRender.bind(this)); 595 Common.Renderer.renderPromise(object).then(appendRenderer.bind(this), failed ToRender.bind(this));
596 return result; 596 return result;
597 597
598 /** 598 /**
599 * @param {!Element} rendererElement 599 * @param {!Element} rendererElement
600 * @this {WebInspector.ConsoleViewMessage} 600 * @this {Console.ConsoleViewMessage}
601 */ 601 */
602 function appendRenderer(rendererElement) { 602 function appendRenderer(rendererElement) {
603 result.appendChild(rendererElement); 603 result.appendChild(rendererElement);
604 this._formattedParameterAsNodeForTest(); 604 this._formattedParameterAsNodeForTest();
605 } 605 }
606 606
607 /** 607 /**
608 * @this {WebInspector.ConsoleViewMessage} 608 * @this {Console.ConsoleViewMessage}
609 */ 609 */
610 function failedToRender() { 610 function failedToRender() {
611 result.appendChild(this._formatParameterAsObject(object, false)); 611 result.appendChild(this._formatParameterAsObject(object, false));
612 } 612 }
613 } 613 }
614 614
615 _formattedParameterAsNodeForTest() { 615 _formattedParameterAsNodeForTest() {
616 } 616 }
617 617
618 /** 618 /**
619 * @param {!WebInspector.RemoteObject} array 619 * @param {!SDK.RemoteObject} array
620 * @return {!Element} 620 * @return {!Element}
621 */ 621 */
622 _formatParameterAsArray(array) { 622 _formatParameterAsArray(array) {
623 var usePrintedArrayFormat = this._message.type !== WebInspector.ConsoleMessa ge.MessageType.DirXML && 623 var usePrintedArrayFormat = this._message.type !== SDK.ConsoleMessage.Messag eType.DirXML &&
624 this._message.type !== WebInspector.ConsoleMessage.MessageType.Result; 624 this._message.type !== SDK.ConsoleMessage.MessageType.Result;
625 var isLongArray = array.arrayLength() > 100; 625 var isLongArray = array.arrayLength() > 100;
626 if (usePrintedArrayFormat || isLongArray) 626 if (usePrintedArrayFormat || isLongArray)
627 return this._formatParameterAsObject(array, usePrintedArrayFormat || !isLo ngArray); 627 return this._formatParameterAsObject(array, usePrintedArrayFormat || !isLo ngArray);
628 var result = createElement('span'); 628 var result = createElement('span');
629 array.getAllProperties(false, printArrayResult.bind(this)); 629 array.getAllProperties(false, printArrayResult.bind(this));
630 return result; 630 return result;
631 631
632 /** 632 /**
633 * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties 633 * @param {?Array.<!SDK.RemoteObjectProperty>} properties
634 * @this {!WebInspector.ConsoleViewMessage} 634 * @this {!Console.ConsoleViewMessage}
635 */ 635 */
636 function printArrayResult(properties) { 636 function printArrayResult(properties) {
637 if (!properties) { 637 if (!properties) {
638 result.appendChild(this._formatParameterAsObject(array, false)); 638 result.appendChild(this._formatParameterAsObject(array, false));
639 return; 639 return;
640 } 640 }
641 641
642 var titleElement = createElement('span'); 642 var titleElement = createElement('span');
643 var elements = {}; 643 var elements = {};
644 for (var i = 0; i < properties.length; ++i) { 644 for (var i = 0; i < properties.length; ++i) {
645 var property = properties[i]; 645 var property = properties[i];
646 var name = property.name; 646 var name = property.name;
647 if (isNaN(name)) 647 if (isNaN(name))
648 continue; 648 continue;
649 if (property.getter) 649 if (property.getter)
650 elements[name] = this._formatAsAccessorProperty(array, [name], true); 650 elements[name] = this._formatAsAccessorProperty(array, [name], true);
651 else if (property.value) 651 else if (property.value)
652 elements[name] = this._formatAsArrayEntry(property.value); 652 elements[name] = this._formatAsArrayEntry(property.value);
653 } 653 }
654 654
655 titleElement.createTextChild('['); 655 titleElement.createTextChild('[');
656 var lastNonEmptyIndex = -1; 656 var lastNonEmptyIndex = -1;
657 657
658 function appendUndefined(titleElement, index) { 658 function appendUndefined(titleElement, index) {
659 if (index - lastNonEmptyIndex <= 1) 659 if (index - lastNonEmptyIndex <= 1)
660 return; 660 return;
661 var span = titleElement.createChild('span', 'object-value-undefined'); 661 var span = titleElement.createChild('span', 'object-value-undefined');
662 span.textContent = WebInspector.UIString('undefined × %d', index - lastN onEmptyIndex - 1); 662 span.textContent = Common.UIString('undefined × %d', index - lastNonEmpt yIndex - 1);
663 } 663 }
664 664
665 var length = array.arrayLength(); 665 var length = array.arrayLength();
666 for (var i = 0; i < length; ++i) { 666 for (var i = 0; i < length; ++i) {
667 var element = elements[i]; 667 var element = elements[i];
668 if (!element) 668 if (!element)
669 continue; 669 continue;
670 670
671 if (i - lastNonEmptyIndex > 1) { 671 if (i - lastNonEmptyIndex > 1) {
672 appendUndefined(titleElement, i); 672 appendUndefined(titleElement, i);
673 titleElement.createTextChild(', '); 673 titleElement.createTextChild(', ');
674 } 674 }
675 675
676 titleElement.appendChild(element); 676 titleElement.appendChild(element);
677 lastNonEmptyIndex = i; 677 lastNonEmptyIndex = i;
678 if (i < length - 1) 678 if (i < length - 1)
679 titleElement.createTextChild(', '); 679 titleElement.createTextChild(', ');
680 } 680 }
681 appendUndefined(titleElement, length); 681 appendUndefined(titleElement, length);
682 682
683 titleElement.createTextChild(']'); 683 titleElement.createTextChild(']');
684 684
685 var section = new WebInspector.ObjectPropertiesSection(array, titleElement , this._linkifier); 685 var section = new Components.ObjectPropertiesSection(array, titleElement, this._linkifier);
686 section.element.classList.add('console-view-object-properties-section'); 686 section.element.classList.add('console-view-object-properties-section');
687 section.enableContextMenu(); 687 section.enableContextMenu();
688 result.appendChild(section.element); 688 result.appendChild(section.element);
689 } 689 }
690 } 690 }
691 691
692 /** 692 /**
693 * @param {!WebInspector.RemoteObject} output 693 * @param {!SDK.RemoteObject} output
694 * @return {!Element} 694 * @return {!Element}
695 */ 695 */
696 _formatParameterAsString(output) { 696 _formatParameterAsString(output) {
697 var span = createElement('span'); 697 var span = createElement('span');
698 span.appendChild(WebInspector.linkifyStringAsFragment(output.description || '')); 698 span.appendChild(Components.linkifyStringAsFragment(output.description || '' ));
699 699
700 var result = createElement('span'); 700 var result = createElement('span');
701 result.createChild('span', 'object-value-string-quote').textContent = '"'; 701 result.createChild('span', 'object-value-string-quote').textContent = '"';
702 result.appendChild(span); 702 result.appendChild(span);
703 result.createChild('span', 'object-value-string-quote').textContent = '"'; 703 result.createChild('span', 'object-value-string-quote').textContent = '"';
704 return result; 704 return result;
705 } 705 }
706 706
707 /** 707 /**
708 * @param {!WebInspector.RemoteObject} output 708 * @param {!SDK.RemoteObject} output
709 * @return {!Element} 709 * @return {!Element}
710 */ 710 */
711 _formatParameterAsError(output) { 711 _formatParameterAsError(output) {
712 var result = createElement('span'); 712 var result = createElement('span');
713 var errorSpan = this._tryFormatAsError(output.description || ''); 713 var errorSpan = this._tryFormatAsError(output.description || '');
714 result.appendChild(errorSpan ? errorSpan : WebInspector.linkifyStringAsFragm ent(output.description || '')); 714 result.appendChild(errorSpan ? errorSpan : Components.linkifyStringAsFragmen t(output.description || ''));
715 return result; 715 return result;
716 } 716 }
717 717
718 /** 718 /**
719 * @param {!WebInspector.RemoteObject} output 719 * @param {!SDK.RemoteObject} output
720 * @return {!Element} 720 * @return {!Element}
721 */ 721 */
722 _formatAsArrayEntry(output) { 722 _formatAsArrayEntry(output) {
723 return this._previewFormatter.renderPropertyPreview(output.type, output.subt ype, output.description); 723 return this._previewFormatter.renderPropertyPreview(output.type, output.subt ype, output.description);
724 } 724 }
725 725
726 /** 726 /**
727 * @param {?WebInspector.RemoteObject} object 727 * @param {?SDK.RemoteObject} object
728 * @param {!Array.<string>} propertyPath 728 * @param {!Array.<string>} propertyPath
729 * @param {boolean} isArrayEntry 729 * @param {boolean} isArrayEntry
730 * @return {!Element} 730 * @return {!Element}
731 */ 731 */
732 _formatAsAccessorProperty(object, propertyPath, isArrayEntry) { 732 _formatAsAccessorProperty(object, propertyPath, isArrayEntry) {
733 var rootElement = WebInspector.ObjectPropertyTreeElement.createRemoteObjectA ccessorPropertySpan( 733 var rootElement = Components.ObjectPropertyTreeElement.createRemoteObjectAcc essorPropertySpan(
734 object, propertyPath, onInvokeGetterClick.bind(this)); 734 object, propertyPath, onInvokeGetterClick.bind(this));
735 735
736 /** 736 /**
737 * @param {?WebInspector.RemoteObject} result 737 * @param {?SDK.RemoteObject} result
738 * @param {boolean=} wasThrown 738 * @param {boolean=} wasThrown
739 * @this {WebInspector.ConsoleViewMessage} 739 * @this {Console.ConsoleViewMessage}
740 */ 740 */
741 function onInvokeGetterClick(result, wasThrown) { 741 function onInvokeGetterClick(result, wasThrown) {
742 if (!result) 742 if (!result)
743 return; 743 return;
744 rootElement.removeChildren(); 744 rootElement.removeChildren();
745 if (wasThrown) { 745 if (wasThrown) {
746 var element = rootElement.createChild('span'); 746 var element = rootElement.createChild('span');
747 element.textContent = WebInspector.UIString('<exception>'); 747 element.textContent = Common.UIString('<exception>');
748 element.title = /** @type {string} */ (result.description); 748 element.title = /** @type {string} */ (result.description);
749 } else if (isArrayEntry) { 749 } else if (isArrayEntry) {
750 rootElement.appendChild(this._formatAsArrayEntry(result)); 750 rootElement.appendChild(this._formatAsArrayEntry(result));
751 } else { 751 } else {
752 // Make a PropertyPreview from the RemoteObject similar to the backend l ogic. 752 // Make a PropertyPreview from the RemoteObject similar to the backend l ogic.
753 const maxLength = 100; 753 const maxLength = 100;
754 var type = result.type; 754 var type = result.type;
755 var subtype = result.subtype; 755 var subtype = result.subtype;
756 var description = ''; 756 var description = '';
757 if (type !== 'function' && result.description) { 757 if (type !== 'function' && result.description) {
758 if (type === 'string' || subtype === 'regexp') 758 if (type === 'string' || subtype === 'regexp')
759 description = result.description.trimMiddle(maxLength); 759 description = result.description.trimMiddle(maxLength);
760 else 760 else
761 description = result.description.trimEnd(maxLength); 761 description = result.description.trimEnd(maxLength);
762 } 762 }
763 rootElement.appendChild(this._previewFormatter.renderPropertyPreview(typ e, subtype, description)); 763 rootElement.appendChild(this._previewFormatter.renderPropertyPreview(typ e, subtype, description));
764 } 764 }
765 } 765 }
766 766
767 return rootElement; 767 return rootElement;
768 } 768 }
769 769
770 /** 770 /**
771 * @param {string} format 771 * @param {string} format
772 * @param {!Array.<!WebInspector.RemoteObject>} parameters 772 * @param {!Array.<!SDK.RemoteObject>} parameters
773 * @param {!Element} formattedResult 773 * @param {!Element} formattedResult
774 */ 774 */
775 _formatWithSubstitutionString(format, parameters, formattedResult) { 775 _formatWithSubstitutionString(format, parameters, formattedResult) {
776 var formatters = {}; 776 var formatters = {};
777 777
778 /** 778 /**
779 * @param {boolean} force 779 * @param {boolean} force
780 * @param {!WebInspector.RemoteObject} obj 780 * @param {!SDK.RemoteObject} obj
781 * @return {!Element} 781 * @return {!Element}
782 * @this {WebInspector.ConsoleViewMessage} 782 * @this {Console.ConsoleViewMessage}
783 */ 783 */
784 function parameterFormatter(force, obj) { 784 function parameterFormatter(force, obj) {
785 return this._formatParameter(obj, force, false); 785 return this._formatParameter(obj, force, false);
786 } 786 }
787 787
788 function stringFormatter(obj) { 788 function stringFormatter(obj) {
789 return obj.description; 789 return obj.description;
790 } 790 }
791 791
792 function floatFormatter(obj) { 792 function floatFormatter(obj) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 842
843 // Support %O to force object formatting, instead of the type-based %o forma tting. 843 // Support %O to force object formatting, instead of the type-based %o forma tting.
844 formatters.O = parameterFormatter.bind(this, true); 844 formatters.O = parameterFormatter.bind(this, true);
845 845
846 formatters._ = bypassFormatter; 846 formatters._ = bypassFormatter;
847 847
848 function append(a, b) { 848 function append(a, b) {
849 if (b instanceof Node) 849 if (b instanceof Node)
850 a.appendChild(b); 850 a.appendChild(b);
851 else if (typeof b !== 'undefined') { 851 else if (typeof b !== 'undefined') {
852 var toAppend = WebInspector.linkifyStringAsFragment(String(b)); 852 var toAppend = Components.linkifyStringAsFragment(String(b));
853 if (currentStyle) { 853 if (currentStyle) {
854 var wrapper = createElement('span'); 854 var wrapper = createElement('span');
855 wrapper.appendChild(toAppend); 855 wrapper.appendChild(toAppend);
856 applyCurrentStyle(wrapper); 856 applyCurrentStyle(wrapper);
857 for (var i = 0; i < wrapper.children.length; ++i) 857 for (var i = 0; i < wrapper.children.length; ++i)
858 applyCurrentStyle(wrapper.children[i]); 858 applyCurrentStyle(wrapper.children[i]);
859 toAppend = wrapper; 859 toAppend = wrapper;
860 } 860 }
861 a.appendChild(toAppend); 861 a.appendChild(toAppend);
862 } 862 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 934
935 /** 935 /**
936 * @return {!Element} 936 * @return {!Element}
937 */ 937 */
938 contentElement() { 938 contentElement() {
939 if (this._contentElement) 939 if (this._contentElement)
940 return this._contentElement; 940 return this._contentElement;
941 941
942 var contentElement = createElementWithClass('div', 'console-message'); 942 var contentElement = createElementWithClass('div', 'console-message');
943 this._contentElement = contentElement; 943 this._contentElement = contentElement;
944 if (this._message.type === WebInspector.ConsoleMessage.MessageType.StartGrou p || 944 if (this._message.type === SDK.ConsoleMessage.MessageType.StartGroup ||
945 this._message.type === WebInspector.ConsoleMessage.MessageType.StartGrou pCollapsed) 945 this._message.type === SDK.ConsoleMessage.MessageType.StartGroupCollapse d)
946 contentElement.classList.add('console-group-title'); 946 contentElement.classList.add('console-group-title');
947 947
948 var formattedMessage; 948 var formattedMessage;
949 var consoleMessage = this._message; 949 var consoleMessage = this._message;
950 var target = consoleMessage.target(); 950 var target = consoleMessage.target();
951 var shouldIncludeTrace = !!consoleMessage.stackTrace && 951 var shouldIncludeTrace = !!consoleMessage.stackTrace &&
952 (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.Net work || 952 (consoleMessage.source === SDK.ConsoleMessage.MessageSource.Network ||
953 consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Error || 953 consoleMessage.level === SDK.ConsoleMessage.MessageLevel.Error ||
954 consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Revok edError || 954 consoleMessage.level === SDK.ConsoleMessage.MessageLevel.RevokedError | |
955 consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trace | | 955 consoleMessage.type === SDK.ConsoleMessage.MessageType.Trace ||
956 consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Warni ng); 956 consoleMessage.level === SDK.ConsoleMessage.MessageLevel.Warning);
957 if (target && shouldIncludeTrace) 957 if (target && shouldIncludeTrace)
958 formattedMessage = this._buildMessageWithStackTrace(consoleMessage, target , this._linkifier); 958 formattedMessage = this._buildMessageWithStackTrace(consoleMessage, target , this._linkifier);
959 else if (this._message.type === WebInspector.ConsoleMessage.MessageType.Tabl e) 959 else if (this._message.type === SDK.ConsoleMessage.MessageType.Table)
960 formattedMessage = this._buildTableMessage(this._message); 960 formattedMessage = this._buildTableMessage(this._message);
961 else 961 else
962 formattedMessage = this._buildMessage(consoleMessage); 962 formattedMessage = this._buildMessage(consoleMessage);
963 contentElement.appendChild(formattedMessage); 963 contentElement.appendChild(formattedMessage);
964 964
965 this.updateTimestamp(WebInspector.moduleSetting('consoleTimestampsEnabled'). get()); 965 this.updateTimestamp(Common.moduleSetting('consoleTimestampsEnabled').get()) ;
966 return this._contentElement; 966 return this._contentElement;
967 } 967 }
968 968
969 /** 969 /**
970 * @return {!Element} 970 * @return {!Element}
971 */ 971 */
972 toMessageElement() { 972 toMessageElement() {
973 if (this._element) 973 if (this._element)
974 return this._element; 974 return this._element;
975 975
976 this._element = createElement('div'); 976 this._element = createElement('div');
977 this.updateMessageElement(); 977 this.updateMessageElement();
978 return this._element; 978 return this._element;
979 } 979 }
980 980
981 updateMessageElement() { 981 updateMessageElement() {
982 if (!this._element) 982 if (!this._element)
983 return; 983 return;
984 984
985 this._element.className = 'console-message-wrapper'; 985 this._element.className = 'console-message-wrapper';
986 this._element.removeChildren(); 986 this._element.removeChildren();
987 987
988 this._nestingLevelMarkers = []; 988 this._nestingLevelMarkers = [];
989 for (var i = 0; i < this._nestingLevel; ++i) 989 for (var i = 0; i < this._nestingLevel; ++i)
990 this._nestingLevelMarkers.push(this._element.createChild('div', 'nesting-l evel-marker')); 990 this._nestingLevelMarkers.push(this._element.createChild('div', 'nesting-l evel-marker'));
991 this._updateCloseGroupDecorations(); 991 this._updateCloseGroupDecorations();
992 this._element.message = this; 992 this._element.message = this;
993 993
994 switch (this._message.level) { 994 switch (this._message.level) {
995 case WebInspector.ConsoleMessage.MessageLevel.Log: 995 case SDK.ConsoleMessage.MessageLevel.Log:
996 this._element.classList.add('console-log-level'); 996 this._element.classList.add('console-log-level');
997 break; 997 break;
998 case WebInspector.ConsoleMessage.MessageLevel.Debug: 998 case SDK.ConsoleMessage.MessageLevel.Debug:
999 this._element.classList.add('console-debug-level'); 999 this._element.classList.add('console-debug-level');
1000 break; 1000 break;
1001 case WebInspector.ConsoleMessage.MessageLevel.Warning: 1001 case SDK.ConsoleMessage.MessageLevel.Warning:
1002 this._element.classList.add('console-warning-level'); 1002 this._element.classList.add('console-warning-level');
1003 break; 1003 break;
1004 case WebInspector.ConsoleMessage.MessageLevel.Error: 1004 case SDK.ConsoleMessage.MessageLevel.Error:
1005 this._element.classList.add('console-error-level'); 1005 this._element.classList.add('console-error-level');
1006 break; 1006 break;
1007 case WebInspector.ConsoleMessage.MessageLevel.RevokedError: 1007 case SDK.ConsoleMessage.MessageLevel.RevokedError:
1008 this._element.classList.add('console-revokedError-level'); 1008 this._element.classList.add('console-revokedError-level');
1009 break; 1009 break;
1010 case WebInspector.ConsoleMessage.MessageLevel.Info: 1010 case SDK.ConsoleMessage.MessageLevel.Info:
1011 this._element.classList.add('console-info-level'); 1011 this._element.classList.add('console-info-level');
1012 break; 1012 break;
1013 } 1013 }
1014 1014
1015 this._element.appendChild(this.contentElement()); 1015 this._element.appendChild(this.contentElement());
1016 if (this._repeatCount > 1) 1016 if (this._repeatCount > 1)
1017 this._showRepeatCountElement(); 1017 this._showRepeatCountElement();
1018 } 1018 }
1019 1019
1020 /** 1020 /**
(...skipping 17 matching lines...) Expand all
1038 this._showRepeatCountElement(); 1038 this._showRepeatCountElement();
1039 } 1039 }
1040 1040
1041 _showRepeatCountElement() { 1041 _showRepeatCountElement() {
1042 if (!this._contentElement) 1042 if (!this._contentElement)
1043 return; 1043 return;
1044 1044
1045 if (!this._repeatCountElement) { 1045 if (!this._repeatCountElement) {
1046 this._repeatCountElement = createElementWithClass('label', 'console-messag e-repeat-count', 'dt-small-bubble'); 1046 this._repeatCountElement = createElementWithClass('label', 'console-messag e-repeat-count', 'dt-small-bubble');
1047 switch (this._message.level) { 1047 switch (this._message.level) {
1048 case WebInspector.ConsoleMessage.MessageLevel.Warning: 1048 case SDK.ConsoleMessage.MessageLevel.Warning:
1049 this._repeatCountElement.type = 'warning'; 1049 this._repeatCountElement.type = 'warning';
1050 break; 1050 break;
1051 case WebInspector.ConsoleMessage.MessageLevel.Error: 1051 case SDK.ConsoleMessage.MessageLevel.Error:
1052 this._repeatCountElement.type = 'error'; 1052 this._repeatCountElement.type = 'error';
1053 break; 1053 break;
1054 case WebInspector.ConsoleMessage.MessageLevel.Debug: 1054 case SDK.ConsoleMessage.MessageLevel.Debug:
1055 this._repeatCountElement.type = 'debug'; 1055 this._repeatCountElement.type = 'debug';
1056 break; 1056 break;
1057 default: 1057 default:
1058 this._repeatCountElement.type = 'info'; 1058 this._repeatCountElement.type = 'info';
1059 } 1059 }
1060 this._element.insertBefore(this._repeatCountElement, this._contentElement) ; 1060 this._element.insertBefore(this._repeatCountElement, this._contentElement) ;
1061 this._contentElement.classList.add('repeated-message'); 1061 this._contentElement.classList.add('repeated-message');
1062 } 1062 }
1063 this._repeatCountElement.textContent = this._repeatCount; 1063 this._repeatCountElement.textContent = this._repeatCount;
1064 } 1064 }
1065 1065
1066 get text() { 1066 get text() {
1067 return this._message.messageText; 1067 return this._message.messageText;
1068 } 1068 }
1069 1069
1070 /** 1070 /**
1071 * @param {?RegExp} regex 1071 * @param {?RegExp} regex
1072 */ 1072 */
1073 setSearchRegex(regex) { 1073 setSearchRegex(regex) {
1074 if (this._searchHiglightNodeChanges && this._searchHiglightNodeChanges.lengt h) 1074 if (this._searchHiglightNodeChanges && this._searchHiglightNodeChanges.lengt h)
1075 WebInspector.revertDomChanges(this._searchHiglightNodeChanges); 1075 UI.revertDomChanges(this._searchHiglightNodeChanges);
1076 this._searchRegex = regex; 1076 this._searchRegex = regex;
1077 this._searchHighlightNodes = []; 1077 this._searchHighlightNodes = [];
1078 this._searchHiglightNodeChanges = []; 1078 this._searchHiglightNodeChanges = [];
1079 if (!this._searchRegex) 1079 if (!this._searchRegex)
1080 return; 1080 return;
1081 1081
1082 var text = this.contentElement().deepTextContent(); 1082 var text = this.contentElement().deepTextContent();
1083 var match; 1083 var match;
1084 this._searchRegex.lastIndex = 0; 1084 this._searchRegex.lastIndex = 0;
1085 var sourceRanges = []; 1085 var sourceRanges = [];
1086 while ((match = this._searchRegex.exec(text)) && match[0]) 1086 while ((match = this._searchRegex.exec(text)) && match[0])
1087 sourceRanges.push(new WebInspector.SourceRange(match.index, match[0].lengt h)); 1087 sourceRanges.push(new Common.SourceRange(match.index, match[0].length));
1088 1088
1089 if (sourceRanges.length) 1089 if (sourceRanges.length)
1090 this._searchHighlightNodes = 1090 this._searchHighlightNodes =
1091 WebInspector.highlightSearchResults(this.contentElement(), sourceRange s, this._searchHiglightNodeChanges); 1091 UI.highlightSearchResults(this.contentElement(), sourceRanges, this._s earchHiglightNodeChanges);
1092 } 1092 }
1093 1093
1094 /** 1094 /**
1095 * @return {?RegExp} 1095 * @return {?RegExp}
1096 */ 1096 */
1097 searchRegex() { 1097 searchRegex() {
1098 return this._searchRegex; 1098 return this._searchRegex;
1099 } 1099 }
1100 1100
1101 /** 1101 /**
(...skipping 19 matching lines...) Expand all
1121 * @param {string} prefix 1121 * @param {string} prefix
1122 */ 1122 */
1123 function startsWith(prefix) { 1123 function startsWith(prefix) {
1124 return string.startsWith(prefix); 1124 return string.startsWith(prefix);
1125 } 1125 }
1126 1126
1127 var errorPrefixes = ['EvalError', 'ReferenceError', 'SyntaxError', 'TypeErro r', 'RangeError', 'Error', 'URIError']; 1127 var errorPrefixes = ['EvalError', 'ReferenceError', 'SyntaxError', 'TypeErro r', 'RangeError', 'Error', 'URIError'];
1128 var target = this._target(); 1128 var target = this._target();
1129 if (!target || !errorPrefixes.some(startsWith)) 1129 if (!target || !errorPrefixes.some(startsWith))
1130 return null; 1130 return null;
1131 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); 1131 var debuggerModel = SDK.DebuggerModel.fromTarget(target);
1132 if (!debuggerModel) 1132 if (!debuggerModel)
1133 return null; 1133 return null;
1134 1134
1135 var lines = string.split('\n'); 1135 var lines = string.split('\n');
1136 var links = []; 1136 var links = [];
1137 var position = 0; 1137 var position = 0;
1138 for (var i = 0; i < lines.length; ++i) { 1138 for (var i = 0; i < lines.length; ++i) {
1139 position += i > 0 ? lines[i - 1].length + 1 : 0; 1139 position += i > 0 ? lines[i - 1].length + 1 : 0;
1140 var isCallFrameLine = /^\s*at\s/.test(lines[i]); 1140 var isCallFrameLine = /^\s*at\s/.test(lines[i]);
1141 if (!isCallFrameLine && links.length) 1141 if (!isCallFrameLine && links.length)
1142 return null; 1142 return null;
1143 1143
1144 if (!isCallFrameLine) 1144 if (!isCallFrameLine)
1145 continue; 1145 continue;
1146 1146
1147 var openBracketIndex = -1; 1147 var openBracketIndex = -1;
1148 var closeBracketIndex = -1; 1148 var closeBracketIndex = -1;
1149 var match = /\([^\)\(]+\)/.exec(lines[i]); 1149 var match = /\([^\)\(]+\)/.exec(lines[i]);
1150 if (match) { 1150 if (match) {
1151 openBracketIndex = match.index; 1151 openBracketIndex = match.index;
1152 closeBracketIndex = match.index + match[0].length - 1; 1152 closeBracketIndex = match.index + match[0].length - 1;
1153 } 1153 }
1154 var hasOpenBracket = openBracketIndex !== -1; 1154 var hasOpenBracket = openBracketIndex !== -1;
1155 var left = hasOpenBracket ? openBracketIndex + 1 : lines[i].indexOf('at') + 3; 1155 var left = hasOpenBracket ? openBracketIndex + 1 : lines[i].indexOf('at') + 3;
1156 var right = hasOpenBracket ? closeBracketIndex : lines[i].length; 1156 var right = hasOpenBracket ? closeBracketIndex : lines[i].length;
1157 var linkCandidate = lines[i].substring(left, right); 1157 var linkCandidate = lines[i].substring(left, right);
1158 var splitResult = WebInspector.ParsedURL.splitLineAndColumn(linkCandidate) ; 1158 var splitResult = Common.ParsedURL.splitLineAndColumn(linkCandidate);
1159 if (!splitResult) 1159 if (!splitResult)
1160 return null; 1160 return null;
1161 1161
1162 var parsed = splitResult.url.asParsedURL(); 1162 var parsed = splitResult.url.asParsedURL();
1163 var url; 1163 var url;
1164 if (parsed) 1164 if (parsed)
1165 url = parsed.url; 1165 url = parsed.url;
1166 else if (debuggerModel.scriptsForSourceURL(splitResult.url).length) 1166 else if (debuggerModel.scriptsForSourceURL(splitResult.url).length)
1167 url = splitResult.url; 1167 url = splitResult.url;
1168 else if (splitResult.url === '<anonymous>') 1168 else if (splitResult.url === '<anonymous>')
1169 continue; 1169 continue;
1170 else 1170 else
1171 return null; 1171 return null;
1172 1172
1173 links.push({ 1173 links.push({
1174 url: url, 1174 url: url,
1175 positionLeft: position + left, 1175 positionLeft: position + left,
1176 positionRight: position + right, 1176 positionRight: position + right,
1177 lineNumber: splitResult.lineNumber, 1177 lineNumber: splitResult.lineNumber,
1178 columnNumber: splitResult.columnNumber 1178 columnNumber: splitResult.columnNumber
1179 }); 1179 });
1180 } 1180 }
1181 1181
1182 if (!links.length) 1182 if (!links.length)
1183 return null; 1183 return null;
1184 1184
1185 var formattedResult = createElement('span'); 1185 var formattedResult = createElement('span');
1186 var start = 0; 1186 var start = 0;
1187 for (var i = 0; i < links.length; ++i) { 1187 for (var i = 0; i < links.length; ++i) {
1188 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(string.su bstring(start, links[i].positionLeft))); 1188 formattedResult.appendChild(Components.linkifyStringAsFragment(string.subs tring(start, links[i].positionLeft)));
1189 formattedResult.appendChild(this._linkifier.linkifyScriptLocation( 1189 formattedResult.appendChild(this._linkifier.linkifyScriptLocation(
1190 target, null, links[i].url, links[i].lineNumber, links[i].columnNumber )); 1190 target, null, links[i].url, links[i].lineNumber, links[i].columnNumber ));
1191 start = links[i].positionRight; 1191 start = links[i].positionRight;
1192 } 1192 }
1193 1193
1194 if (start !== string.length) 1194 if (start !== string.length)
1195 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(string.su bstring(start))); 1195 formattedResult.appendChild(Components.linkifyStringAsFragment(string.subs tring(start)));
1196 1196
1197 return formattedResult; 1197 return formattedResult;
1198 } 1198 }
1199 }; 1199 };
1200 1200
1201 /** 1201 /**
1202 * @unrestricted 1202 * @unrestricted
1203 */ 1203 */
1204 WebInspector.ConsoleGroupViewMessage = class extends WebInspector.ConsoleViewMes sage { 1204 Console.ConsoleGroupViewMessage = class extends Console.ConsoleViewMessage {
1205 /** 1205 /**
1206 * @param {!WebInspector.ConsoleMessage} consoleMessage 1206 * @param {!SDK.ConsoleMessage} consoleMessage
1207 * @param {!WebInspector.Linkifier} linkifier 1207 * @param {!Components.Linkifier} linkifier
1208 * @param {number} nestingLevel 1208 * @param {number} nestingLevel
1209 */ 1209 */
1210 constructor(consoleMessage, linkifier, nestingLevel) { 1210 constructor(consoleMessage, linkifier, nestingLevel) {
1211 console.assert(consoleMessage.isGroupStartMessage()); 1211 console.assert(consoleMessage.isGroupStartMessage());
1212 super(consoleMessage, linkifier, nestingLevel); 1212 super(consoleMessage, linkifier, nestingLevel);
1213 this.setCollapsed(consoleMessage.type === WebInspector.ConsoleMessage.Messag eType.StartGroupCollapsed); 1213 this.setCollapsed(consoleMessage.type === SDK.ConsoleMessage.MessageType.Sta rtGroupCollapsed);
1214 } 1214 }
1215 1215
1216 /** 1216 /**
1217 * @param {boolean} collapsed 1217 * @param {boolean} collapsed
1218 */ 1218 */
1219 setCollapsed(collapsed) { 1219 setCollapsed(collapsed) {
1220 this._collapsed = collapsed; 1220 this._collapsed = collapsed;
1221 if (this._element) 1221 if (this._element)
1222 this._element.classList.toggle('collapsed', this._collapsed); 1222 this._element.classList.toggle('collapsed', this._collapsed);
1223 } 1223 }
(...skipping 10 matching lines...) Expand all
1234 * @return {!Element} 1234 * @return {!Element}
1235 */ 1235 */
1236 toMessageElement() { 1236 toMessageElement() {
1237 if (!this._element) { 1237 if (!this._element) {
1238 super.toMessageElement(); 1238 super.toMessageElement();
1239 this._element.classList.toggle('collapsed', this._collapsed); 1239 this._element.classList.toggle('collapsed', this._collapsed);
1240 } 1240 }
1241 return this._element; 1241 return this._element;
1242 } 1242 }
1243 }; 1243 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698