| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 }; |
| OLD | NEW |