| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2009 Joseph Pecoraro | 3 * Copyright (C) 2009 Joseph Pecoraro |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 WebInspector.targetManager.observeTargets(this); | 148 WebInspector.targetManager.observeTargets(this); |
| 149 | 149 |
| 150 this._initConsoleMessages(); | 150 this._initConsoleMessages(); |
| 151 | 151 |
| 152 WebInspector.context.addFlavorChangeListener(WebInspector.ExecutionContext,
this._executionContextChanged, this); | 152 WebInspector.context.addFlavorChangeListener(WebInspector.ExecutionContext,
this._executionContextChanged, this); |
| 153 | 153 |
| 154 this._messagesElement.addEventListener("mousedown", this._updateStickToBotto
mOnMouseDown.bind(this), false); | 154 this._messagesElement.addEventListener("mousedown", this._updateStickToBotto
mOnMouseDown.bind(this), false); |
| 155 this._messagesElement.addEventListener("mouseup", this._updateStickToBottomO
nMouseUp.bind(this), false); | 155 this._messagesElement.addEventListener("mouseup", this._updateStickToBottomO
nMouseUp.bind(this), false); |
| 156 this._messagesElement.addEventListener("mouseleave", this._updateStickToBott
omOnMouseUp.bind(this), false); | 156 this._messagesElement.addEventListener("mouseleave", this._updateStickToBott
omOnMouseUp.bind(this), false); |
| 157 this._messagesElement.addEventListener("wheel", this._updateStickToBottomOnW
heel.bind(this), false); | 157 this._messagesElement.addEventListener("wheel", this._updateStickToBottomOnW
heel.bind(this), false); |
| 158 } | 158 }; |
| 159 | 159 |
| 160 WebInspector.ConsoleView.persistedHistorySize = 300; | 160 WebInspector.ConsoleView.persistedHistorySize = 300; |
| 161 | 161 |
| 162 WebInspector.ConsoleView.prototype = { | 162 WebInspector.ConsoleView.prototype = { |
| 163 /** | 163 /** |
| 164 * @return {!WebInspector.SearchableView} | 164 * @return {!WebInspector.SearchableView} |
| 165 */ | 165 */ |
| 166 searchableView: function() | 166 searchableView: function() |
| 167 { | 167 { |
| 168 return this._searchableView; | 168 return this._searchableView; |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 */ | 445 */ |
| 446 function compareTimestamps(viewMessage1, viewMessage2) | 446 function compareTimestamps(viewMessage1, viewMessage2) |
| 447 { | 447 { |
| 448 return WebInspector.ConsoleMessage.timestampComparator(viewMessage1.
consoleMessage(), viewMessage2.consoleMessage()); | 448 return WebInspector.ConsoleMessage.timestampComparator(viewMessage1.
consoleMessage(), viewMessage2.consoleMessage()); |
| 449 } | 449 } |
| 450 | 450 |
| 451 if (message.type === WebInspector.ConsoleMessage.MessageType.Command ||
message.type === WebInspector.ConsoleMessage.MessageType.Result) | 451 if (message.type === WebInspector.ConsoleMessage.MessageType.Command ||
message.type === WebInspector.ConsoleMessage.MessageType.Result) |
| 452 message.timestamp = this._consoleMessages.length ? this._consoleMess
ages.peekLast().consoleMessage().timestamp : 0; | 452 message.timestamp = this._consoleMessages.length ? this._consoleMess
ages.peekLast().consoleMessage().timestamp : 0; |
| 453 var viewMessage = this._createViewMessage(message); | 453 var viewMessage = this._createViewMessage(message); |
| 454 message[this._viewMessageSymbol] = viewMessage; | 454 message[this._viewMessageSymbol] = viewMessage; |
| 455 var insertAt = this._consoleMessages.upperBound(viewMessage, compareTime
stamps) | 455 var insertAt = this._consoleMessages.upperBound(viewMessage, compareTime
stamps); |
| 456 var insertedInMiddle = insertAt < this._consoleMessages.length; | 456 var insertedInMiddle = insertAt < this._consoleMessages.length; |
| 457 this._consoleMessages.splice(insertAt, 0, viewMessage); | 457 this._consoleMessages.splice(insertAt, 0, viewMessage); |
| 458 | 458 |
| 459 if (this._urlToMessageCount[message.url]) | 459 if (this._urlToMessageCount[message.url]) |
| 460 ++this._urlToMessageCount[message.url]; | 460 ++this._urlToMessageCount[message.url]; |
| 461 else | 461 else |
| 462 this._urlToMessageCount[message.url] = 1; | 462 this._urlToMessageCount[message.url] = 1; |
| 463 | 463 |
| 464 if (!insertedInMiddle) { | 464 if (!insertedInMiddle) { |
| 465 this._appendMessageToEnd(viewMessage); | 465 this._appendMessageToEnd(viewMessage); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 561 this._linkifier.reset(); | 561 this._linkifier.reset(); |
| 562 }, | 562 }, |
| 563 | 563 |
| 564 _handleContextMenuEvent: function(event) | 564 _handleContextMenuEvent: function(event) |
| 565 { | 565 { |
| 566 if (event.target.enclosingNodeOrSelfWithNodeName("a")) | 566 if (event.target.enclosingNodeOrSelfWithNodeName("a")) |
| 567 return; | 567 return; |
| 568 | 568 |
| 569 var contextMenu = new WebInspector.ContextMenu(event); | 569 var contextMenu = new WebInspector.ContextMenu(event); |
| 570 if (event.target.isSelfOrDescendant(this._promptElement)) { | 570 if (event.target.isSelfOrDescendant(this._promptElement)) { |
| 571 contextMenu.show() | 571 contextMenu.show(); |
| 572 return; | 572 return; |
| 573 } | 573 } |
| 574 | 574 |
| 575 function monitoringXHRItemAction() | 575 function monitoringXHRItemAction() |
| 576 { | 576 { |
| 577 WebInspector.moduleSetting("monitoringXHREnabled").set(!WebInspector
.moduleSetting("monitoringXHREnabled").get()); | 577 WebInspector.moduleSetting("monitoringXHREnabled").set(!WebInspector
.moduleSetting("monitoringXHREnabled").get()); |
| 578 } | 578 } |
| 579 contextMenu.appendCheckboxItem(WebInspector.UIString("Log XMLHttpRequest
s"), monitoringXHRItemAction, WebInspector.moduleSetting("monitoringXHREnabled")
.get()); | 579 contextMenu.appendCheckboxItem(WebInspector.UIString("Log XMLHttpRequest
s"), monitoringXHRItemAction, WebInspector.moduleSetting("monitoringXHREnabled")
.get()); |
| 580 | 580 |
| 581 var sourceElement = event.target.enclosingNodeOrSelfWithClass("console-m
essage-wrapper"); | 581 var sourceElement = event.target.enclosingNodeOrSelfWithClass("console-m
essage-wrapper"); |
| (...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1047 }, | 1047 }, |
| 1048 | 1048 |
| 1049 _promptInput: function(event) | 1049 _promptInput: function(event) |
| 1050 { | 1050 { |
| 1051 // Scroll to the bottom, except when the prompt is the only visible item
. | 1051 // Scroll to the bottom, except when the prompt is the only visible item
. |
| 1052 if (this.itemCount() !== 0 && this._viewport.firstVisibleIndex() !== thi
s.itemCount()) | 1052 if (this.itemCount() !== 0 && this._viewport.firstVisibleIndex() !== thi
s.itemCount()) |
| 1053 this._immediatelyScrollToBottom(); | 1053 this._immediatelyScrollToBottom(); |
| 1054 }, | 1054 }, |
| 1055 | 1055 |
| 1056 __proto__: WebInspector.VBox.prototype | 1056 __proto__: WebInspector.VBox.prototype |
| 1057 } | 1057 }; |
| 1058 | 1058 |
| 1059 /** | 1059 /** |
| 1060 * @constructor | 1060 * @constructor |
| 1061 * @extends {WebInspector.Object} | 1061 * @extends {WebInspector.Object} |
| 1062 * @param {!WebInspector.ConsoleView} view | 1062 * @param {!WebInspector.ConsoleView} view |
| 1063 */ | 1063 */ |
| 1064 WebInspector.ConsoleViewFilter = function(view) | 1064 WebInspector.ConsoleViewFilter = function(view) |
| 1065 { | 1065 { |
| 1066 this._messageURLFiltersSetting = WebInspector.settings.createSetting("messag
eURLFilters", {}); | 1066 this._messageURLFiltersSetting = WebInspector.settings.createSetting("messag
eURLFilters", {}); |
| 1067 this._messageLevelFiltersSetting = WebInspector.settings.createSetting("mess
ageLevelFilters", {}); | 1067 this._messageLevelFiltersSetting = WebInspector.settings.createSetting("mess
ageLevelFilters", {}); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1200 /** | 1200 /** |
| 1201 * @constructor | 1201 * @constructor |
| 1202 * @extends {WebInspector.ConsoleViewMessage} | 1202 * @extends {WebInspector.ConsoleViewMessage} |
| 1203 * @param {!WebInspector.ConsoleMessage} message | 1203 * @param {!WebInspector.ConsoleMessage} message |
| 1204 * @param {!WebInspector.Linkifier} linkifier | 1204 * @param {!WebInspector.Linkifier} linkifier |
| 1205 * @param {number} nestingLevel | 1205 * @param {number} nestingLevel |
| 1206 */ | 1206 */ |
| 1207 WebInspector.ConsoleCommand = function(message, linkifier, nestingLevel) | 1207 WebInspector.ConsoleCommand = function(message, linkifier, nestingLevel) |
| 1208 { | 1208 { |
| 1209 WebInspector.ConsoleViewMessage.call(this, message, linkifier, nestingLevel)
; | 1209 WebInspector.ConsoleViewMessage.call(this, message, linkifier, nestingLevel)
; |
| 1210 } | 1210 }; |
| 1211 | 1211 |
| 1212 WebInspector.ConsoleCommand.prototype = { | 1212 WebInspector.ConsoleCommand.prototype = { |
| 1213 /** | 1213 /** |
| 1214 * @override | 1214 * @override |
| 1215 * @return {!Element} | 1215 * @return {!Element} |
| 1216 */ | 1216 */ |
| 1217 contentElement: function() | 1217 contentElement: function() |
| 1218 { | 1218 { |
| 1219 if (!this._contentElement) { | 1219 if (!this._contentElement) { |
| 1220 this._contentElement = createElementWithClass("div", "console-user-c
ommand"); | 1220 this._contentElement = createElementWithClass("div", "console-user-c
ommand"); |
| 1221 this._contentElement.message = this; | 1221 this._contentElement.message = this; |
| 1222 | 1222 |
| 1223 this._formattedCommand = createElementWithClass("span", "console-mes
sage-text source-code"); | 1223 this._formattedCommand = createElementWithClass("span", "console-mes
sage-text source-code"); |
| 1224 this._formattedCommand.textContent = this.text.replaceControlCharact
ers(); | 1224 this._formattedCommand.textContent = this.text.replaceControlCharact
ers(); |
| 1225 this._contentElement.appendChild(this._formattedCommand); | 1225 this._contentElement.appendChild(this._formattedCommand); |
| 1226 | 1226 |
| 1227 if (this._formattedCommand.textContent.length < WebInspector.Console
Command.MaxLengthToIgnoreHighlighter) { | 1227 if (this._formattedCommand.textContent.length < WebInspector.Console
Command.MaxLengthToIgnoreHighlighter) { |
| 1228 var javascriptSyntaxHighlighter = new WebInspector.DOMSyntaxHigh
lighter("text/javascript", true); | 1228 var javascriptSyntaxHighlighter = new WebInspector.DOMSyntaxHigh
lighter("text/javascript", true); |
| 1229 javascriptSyntaxHighlighter.syntaxHighlightNode(this._formattedC
ommand).then(this._updateSearch.bind(this)) | 1229 javascriptSyntaxHighlighter.syntaxHighlightNode(this._formattedC
ommand).then(this._updateSearch.bind(this)); |
| 1230 } else { | 1230 } else { |
| 1231 this._updateSearch(); | 1231 this._updateSearch(); |
| 1232 } | 1232 } |
| 1233 } | 1233 } |
| 1234 return this._contentElement; | 1234 return this._contentElement; |
| 1235 }, | 1235 }, |
| 1236 | 1236 |
| 1237 _updateSearch: function() | 1237 _updateSearch: function() |
| 1238 { | 1238 { |
| 1239 this.setSearchRegex(this.searchRegex()); | 1239 this.setSearchRegex(this.searchRegex()); |
| 1240 }, | 1240 }, |
| 1241 | 1241 |
| 1242 __proto__: WebInspector.ConsoleViewMessage.prototype | 1242 __proto__: WebInspector.ConsoleViewMessage.prototype |
| 1243 } | 1243 }; |
| 1244 | 1244 |
| 1245 /** | 1245 /** |
| 1246 * The maximum length before strings are considered too long for syntax highligh
ting. | 1246 * The maximum length before strings are considered too long for syntax highligh
ting. |
| 1247 * @const | 1247 * @const |
| 1248 * @type {number} | 1248 * @type {number} |
| 1249 */ | 1249 */ |
| 1250 WebInspector.ConsoleCommand.MaxLengthToIgnoreHighlighter = 10000; | 1250 WebInspector.ConsoleCommand.MaxLengthToIgnoreHighlighter = 10000; |
| 1251 | 1251 |
| 1252 /** | 1252 /** |
| 1253 * @constructor | 1253 * @constructor |
| 1254 * @extends {WebInspector.ConsoleViewMessage} | 1254 * @extends {WebInspector.ConsoleViewMessage} |
| 1255 * @param {!WebInspector.ConsoleMessage} message | 1255 * @param {!WebInspector.ConsoleMessage} message |
| 1256 * @param {!WebInspector.Linkifier} linkifier | 1256 * @param {!WebInspector.Linkifier} linkifier |
| 1257 * @param {number} nestingLevel | 1257 * @param {number} nestingLevel |
| 1258 */ | 1258 */ |
| 1259 WebInspector.ConsoleCommandResult = function(message, linkifier, nestingLevel) | 1259 WebInspector.ConsoleCommandResult = function(message, linkifier, nestingLevel) |
| 1260 { | 1260 { |
| 1261 WebInspector.ConsoleViewMessage.call(this, message, linkifier, nestingLevel)
; | 1261 WebInspector.ConsoleViewMessage.call(this, message, linkifier, nestingLevel)
; |
| 1262 } | 1262 }; |
| 1263 | 1263 |
| 1264 WebInspector.ConsoleCommandResult.prototype = { | 1264 WebInspector.ConsoleCommandResult.prototype = { |
| 1265 /** | 1265 /** |
| 1266 * @override | 1266 * @override |
| 1267 * @return {!Element} | 1267 * @return {!Element} |
| 1268 */ | 1268 */ |
| 1269 contentElement: function() | 1269 contentElement: function() |
| 1270 { | 1270 { |
| 1271 var element = WebInspector.ConsoleViewMessage.prototype.contentElement.c
all(this); | 1271 var element = WebInspector.ConsoleViewMessage.prototype.contentElement.c
all(this); |
| 1272 element.classList.add("console-user-command-result"); | 1272 element.classList.add("console-user-command-result"); |
| 1273 this.updateTimestamp(false); | 1273 this.updateTimestamp(false); |
| 1274 return element; | 1274 return element; |
| 1275 }, | 1275 }, |
| 1276 | 1276 |
| 1277 __proto__: WebInspector.ConsoleViewMessage.prototype | 1277 __proto__: WebInspector.ConsoleViewMessage.prototype |
| 1278 } | 1278 }; |
| 1279 | 1279 |
| 1280 /** | 1280 /** |
| 1281 * @constructor | 1281 * @constructor |
| 1282 * @param {?WebInspector.ConsoleGroup} parentGroup | 1282 * @param {?WebInspector.ConsoleGroup} parentGroup |
| 1283 * @param {?WebInspector.ConsoleViewMessage} groupMessage | 1283 * @param {?WebInspector.ConsoleViewMessage} groupMessage |
| 1284 */ | 1284 */ |
| 1285 WebInspector.ConsoleGroup = function(parentGroup, groupMessage) | 1285 WebInspector.ConsoleGroup = function(parentGroup, groupMessage) |
| 1286 { | 1286 { |
| 1287 this._parentGroup = parentGroup; | 1287 this._parentGroup = parentGroup; |
| 1288 this._nestingLevel = parentGroup ? parentGroup.nestingLevel() + 1 : 0; | 1288 this._nestingLevel = parentGroup ? parentGroup.nestingLevel() + 1 : 0; |
| 1289 this._messagesHidden = groupMessage && groupMessage.collapsed() || this._par
entGroup && this._parentGroup.messagesHidden(); | 1289 this._messagesHidden = groupMessage && groupMessage.collapsed() || this._par
entGroup && this._parentGroup.messagesHidden(); |
| 1290 } | 1290 }; |
| 1291 | 1291 |
| 1292 /** | 1292 /** |
| 1293 * @return {!WebInspector.ConsoleGroup} | 1293 * @return {!WebInspector.ConsoleGroup} |
| 1294 */ | 1294 */ |
| 1295 WebInspector.ConsoleGroup.createTopGroup = function() | 1295 WebInspector.ConsoleGroup.createTopGroup = function() |
| 1296 { | 1296 { |
| 1297 return new WebInspector.ConsoleGroup(null, null); | 1297 return new WebInspector.ConsoleGroup(null, null); |
| 1298 } | 1298 }; |
| 1299 | 1299 |
| 1300 WebInspector.ConsoleGroup.prototype = { | 1300 WebInspector.ConsoleGroup.prototype = { |
| 1301 /** | 1301 /** |
| 1302 * @return {boolean} | 1302 * @return {boolean} |
| 1303 */ | 1303 */ |
| 1304 messagesHidden: function() | 1304 messagesHidden: function() |
| 1305 { | 1305 { |
| 1306 return this._messagesHidden; | 1306 return this._messagesHidden; |
| 1307 }, | 1307 }, |
| 1308 | 1308 |
| 1309 /** | 1309 /** |
| 1310 * @return {number} | 1310 * @return {number} |
| 1311 */ | 1311 */ |
| 1312 nestingLevel: function() | 1312 nestingLevel: function() |
| 1313 { | 1313 { |
| 1314 return this._nestingLevel; | 1314 return this._nestingLevel; |
| 1315 }, | 1315 }, |
| 1316 | 1316 |
| 1317 /** | 1317 /** |
| 1318 * @return {?WebInspector.ConsoleGroup} | 1318 * @return {?WebInspector.ConsoleGroup} |
| 1319 */ | 1319 */ |
| 1320 parentGroup: function() | 1320 parentGroup: function() |
| 1321 { | 1321 { |
| 1322 return this._parentGroup || this; | 1322 return this._parentGroup || this; |
| 1323 }, | 1323 }, |
| 1324 } | 1324 }; |
| 1325 | 1325 |
| 1326 /** | 1326 /** |
| 1327 * @return {!WebInspector.ConsoleView} | 1327 * @return {!WebInspector.ConsoleView} |
| 1328 */ | 1328 */ |
| 1329 WebInspector.ConsoleView.instance = function() | 1329 WebInspector.ConsoleView.instance = function() |
| 1330 { | 1330 { |
| 1331 if (!WebInspector.ConsoleView._instance) | 1331 if (!WebInspector.ConsoleView._instance) |
| 1332 WebInspector.ConsoleView._instance = new WebInspector.ConsoleView(); | 1332 WebInspector.ConsoleView._instance = new WebInspector.ConsoleView(); |
| 1333 return WebInspector.ConsoleView._instance; | 1333 return WebInspector.ConsoleView._instance; |
| 1334 } | 1334 }; |
| 1335 | 1335 |
| 1336 WebInspector.ConsoleView.clearConsole = function() | 1336 WebInspector.ConsoleView.clearConsole = function() |
| 1337 { | 1337 { |
| 1338 for (var target of WebInspector.targetManager.targets()) { | 1338 for (var target of WebInspector.targetManager.targets()) { |
| 1339 target.runtimeModel.discardConsoleEntries(); | 1339 target.runtimeModel.discardConsoleEntries(); |
| 1340 target.consoleModel.requestClearMessages(); | 1340 target.consoleModel.requestClearMessages(); |
| 1341 } | 1341 } |
| 1342 } | 1342 }; |
| 1343 | 1343 |
| 1344 /** | 1344 /** |
| 1345 * @constructor | 1345 * @constructor |
| 1346 * @implements {WebInspector.ActionDelegate} | 1346 * @implements {WebInspector.ActionDelegate} |
| 1347 */ | 1347 */ |
| 1348 WebInspector.ConsoleView.ActionDelegate = function() | 1348 WebInspector.ConsoleView.ActionDelegate = function() |
| 1349 { | 1349 { |
| 1350 } | 1350 }; |
| 1351 | 1351 |
| 1352 WebInspector.ConsoleView.ActionDelegate.prototype = { | 1352 WebInspector.ConsoleView.ActionDelegate.prototype = { |
| 1353 /** | 1353 /** |
| 1354 * @override | 1354 * @override |
| 1355 * @param {!WebInspector.Context} context | 1355 * @param {!WebInspector.Context} context |
| 1356 * @param {string} actionId | 1356 * @param {string} actionId |
| 1357 * @return {boolean} | 1357 * @return {boolean} |
| 1358 */ | 1358 */ |
| 1359 handleAction: function(context, actionId) | 1359 handleAction: function(context, actionId) |
| 1360 { | 1360 { |
| 1361 switch (actionId) { | 1361 switch (actionId) { |
| 1362 case "console.show": | 1362 case "console.show": |
| 1363 WebInspector.console.show(); | 1363 WebInspector.console.show(); |
| 1364 return true; | 1364 return true; |
| 1365 case "console.clear": | 1365 case "console.clear": |
| 1366 WebInspector.ConsoleView.clearConsole(); | 1366 WebInspector.ConsoleView.clearConsole(); |
| 1367 return true; | 1367 return true; |
| 1368 case "console.clear.history": | 1368 case "console.clear.history": |
| 1369 WebInspector.ConsoleView.instance()._clearHistory(); | 1369 WebInspector.ConsoleView.instance()._clearHistory(); |
| 1370 return true; | 1370 return true; |
| 1371 } | 1371 } |
| 1372 return false; | 1372 return false; |
| 1373 } | 1373 } |
| 1374 } | 1374 }; |
| 1375 | 1375 |
| 1376 /** | 1376 /** |
| 1377 * @typedef {{messageIndex: number, matchIndex: number}} | 1377 * @typedef {{messageIndex: number, matchIndex: number}} |
| 1378 */ | 1378 */ |
| 1379 WebInspector.ConsoleView.RegexMatchRange; | 1379 WebInspector.ConsoleView.RegexMatchRange; |
| OLD | NEW |