diff options
Diffstat (limited to 'src/3rdparty/webkit/WebCore/inspector/front-end/ConsoleView.js')
-rw-r--r-- | src/3rdparty/webkit/WebCore/inspector/front-end/ConsoleView.js | 252 |
1 files changed, 143 insertions, 109 deletions
diff --git a/src/3rdparty/webkit/WebCore/inspector/front-end/ConsoleView.js b/src/3rdparty/webkit/WebCore/inspector/front-end/ConsoleView.js index 4f50eccdca..9317824d24 100644 --- a/src/3rdparty/webkit/WebCore/inspector/front-end/ConsoleView.js +++ b/src/3rdparty/webkit/WebCore/inspector/front-end/ConsoleView.js @@ -27,6 +27,8 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +const ExpressionStopCharacters = " =:[({;,!+-*/&|^<>"; + WebInspector.ConsoleView = function(drawer) { WebInspector.View.call(this, document.getElementById("console-view")); @@ -44,7 +46,7 @@ WebInspector.ConsoleView = function(drawer) this.promptElement = document.getElementById("console-prompt"); this.promptElement.handleKeyEvent = this._promptKeyDown.bind(this); - this.prompt = new WebInspector.TextPrompt(this.promptElement, this.completions.bind(this), " .=:[({;"); + this.prompt = new WebInspector.TextPrompt(this.promptElement, this.completions.bind(this), ExpressionStopCharacters + "."); this.topGroup = new WebInspector.ConsoleGroup(null, 0); this.messagesElement.insertBefore(this.topGroup.element, this.promptElement); @@ -92,49 +94,76 @@ WebInspector.ConsoleView = function(drawer) this.warningElement = createFilterElement.call(this, "Warnings"); this.logElement = createFilterElement.call(this, "Logs"); - this.filter(this.allElement); + this.filter(this.allElement, false); } WebInspector.ConsoleView.prototype = { _updateFilter: function(e) { - this.filter(e.target); + var isMac = InspectorController.platform().indexOf("mac-") === 0; + var selectMultiple = false; + if (isMac && e.metaKey && !e.ctrlKey && !e.altKey && !e.shiftKey) + selectMultiple = true; + if (!isMac && e.ctrlKey && !e.metaKey && !e.altKey && !e.shiftKey) + selectMultiple = true; + + this.filter(e.target, selectMultiple); }, - filter: function(target) + filter: function(target, selectMultiple) { + function unselectAll() + { + this.allElement.removeStyleClass("selected"); + this.errorElement.removeStyleClass("selected"); + this.warningElement.removeStyleClass("selected"); + this.logElement.removeStyleClass("selected"); + + this.messagesElement.removeStyleClass("filter-all"); + this.messagesElement.removeStyleClass("filter-errors"); + this.messagesElement.removeStyleClass("filter-warnings"); + this.messagesElement.removeStyleClass("filter-logs"); + } + + var targetFilterClass = "filter-" + target.category.toLowerCase(); + if (target.category == "All") { if (target.hasStyleClass("selected")) { // We can't unselect all, so we break early here return; } - - this.errorElement.removeStyleClass("selected"); - this.warningElement.removeStyleClass("selected"); - this.logElement.removeStyleClass("selected"); - - document.getElementById("console-messages").removeStyleClass("filter-errors"); - document.getElementById("console-messages").removeStyleClass("filter-warnings"); - document.getElementById("console-messages").removeStyleClass("filter-logs"); + + unselectAll.call(this); } else { // Something other than all is being selected, so we want to unselect all if (this.allElement.hasStyleClass("selected")) { this.allElement.removeStyleClass("selected"); - document.getElementById("console-messages").removeStyleClass("filter-all"); + this.messagesElement.removeStyleClass("filter-all"); } } + if (!selectMultiple) { + // If multiple selection is off, we want to unselect everything else + // and just select ourselves. + unselectAll.call(this); + + target.addStyleClass("selected"); + this.messagesElement.addStyleClass(targetFilterClass); + + return; + } + if (target.hasStyleClass("selected")) { + // If selectMultiple is turned on, and we were selected, we just + // want to unselect ourselves. target.removeStyleClass("selected"); - var newClass = "filter-" + target.category.toLowerCase(); - var filterElement = document.getElementById("console-messages"); - filterElement.removeStyleClass(newClass); + this.messagesElement.removeStyleClass(targetFilterClass); } else { + // If selectMultiple is turned on, and we weren't selected, we just + // want to select ourselves. target.addStyleClass("selected"); - var newClass = "filter-" + target.category.toLowerCase(); - var filterElement = document.getElementById("console-messages"); - filterElement.addStyleClass(newClass); + this.messagesElement.addStyleClass(targetFilterClass); } }, @@ -172,40 +201,7 @@ WebInspector.ConsoleView.prototype = { addMessage: function(msg) { if (msg instanceof WebInspector.ConsoleMessage && !(msg instanceof WebInspector.ConsoleCommandResult)) { - msg.totalRepeatCount = msg.repeatCount; - msg.repeatDelta = msg.repeatCount; - - var messageRepeated = false; - - if (msg.isEqual && msg.isEqual(this.previousMessage)) { - // Because sometimes we get a large number of repeated messages and sometimes - // we get them one at a time, we need to know the difference between how many - // repeats we used to have and how many we have now. - msg.repeatDelta -= this.previousMessage.totalRepeatCount; - - if (!isNaN(this.repeatCountBeforeCommand)) - msg.repeatCount -= this.repeatCountBeforeCommand; - - if (!this.commandSincePreviousMessage) { - // Recreate the previous message element to reset the repeat count. - var messagesElement = this.currentGroup.messagesElement; - messagesElement.removeChild(messagesElement.lastChild); - messagesElement.appendChild(msg.toMessageElement()); - - messageRepeated = true; - } - } else - delete this.repeatCountBeforeCommand; - - // Increment the error or warning count - switch (msg.level) { - case WebInspector.ConsoleMessage.MessageLevel.Warning: - WebInspector.warnings += msg.repeatDelta; - break; - case WebInspector.ConsoleMessage.MessageLevel.Error: - WebInspector.errors += msg.repeatDelta; - break; - } + this._incrementErrorWarningCount(msg); // Add message to the resource panel if (msg.url in WebInspector.resourceURLMap) { @@ -216,13 +212,9 @@ WebInspector.ConsoleView.prototype = { this.commandSincePreviousMessage = false; this.previousMessage = msg; - - if (messageRepeated) - return; } else if (msg instanceof WebInspector.ConsoleCommand) { if (this.previousMessage) { this.commandSincePreviousMessage = true; - this.repeatCountBeforeCommand = this.previousMessage.totalRepeatCount; } } @@ -250,6 +242,35 @@ WebInspector.ConsoleView.prototype = { this.promptElement.scrollIntoView(false); }, + updateMessageRepeatCount: function(count) { + var msg = this.previousMessage; + var prevRepeatCount = msg.totalRepeatCount; + + if (!this.commandSincePreviousMessage) { + msg.repeatDelta = count - prevRepeatCount; + msg.repeatCount = msg.repeatCount + msg.repeatDelta; + msg.totalRepeatCount = count; + msg._updateRepeatCount(); + this._incrementErrorWarningCount(msg); + } else { + msgCopy = new WebInspector.ConsoleMessage(msg.source, msg.type, msg.level, msg.line, msg.url, msg.groupLevel, count - prevRepeatCount); + msgCopy.totalRepeatCount = count; + msgCopy.setMessageBody(msg.args); + this.addMessage(msgCopy); + } + }, + + _incrementErrorWarningCount: function(msg) { + switch (msg.level) { + case WebInspector.ConsoleMessage.MessageLevel.Warning: + WebInspector.warnings += msg.repeatDelta; + break; + case WebInspector.ConsoleMessage.MessageLevel.Error: + WebInspector.errors += msg.repeatDelta; + break; + } + }, + clearMessages: function(clearInspectorController) { if (clearInspectorController) @@ -267,15 +288,13 @@ WebInspector.ConsoleView.prototype = { WebInspector.warnings = 0; delete this.commandSincePreviousMessage; - delete this.repeatCountBeforeCommand; delete this.previousMessage; }, completions: function(wordRange, bestMatchOnly, completionsReadyCallback) { // Pass less stop characters to rangeOfWord so the range will be a more complete expression. - const expressionStopCharacters = " =:{;"; - var expressionRange = wordRange.startContainer.rangeOfWord(wordRange.startOffset, expressionStopCharacters, this.promptElement, "backward"); + var expressionRange = wordRange.startContainer.rangeOfWord(wordRange.startOffset, ExpressionStopCharacters, this.promptElement, "backward"); var expressionString = expressionRange.toString(); var lastIndex = expressionString.length - 1; @@ -292,16 +311,6 @@ WebInspector.ConsoleView.prototype = { var reportCompletions = this._reportCompletions.bind(this, bestMatchOnly, completionsReadyCallback, dotNotation, bracketNotation, prefix); // Collect comma separated object properties for the completion. - if (!expressionString) { - if (WebInspector.panels.scripts && WebInspector.panels.scripts.paused) { - // Evaluate into properties in scope of the selected call frame. - reportCompletions(WebInspector.panels.scripts.variablesInSelectedCallFrame()); - return; - } else { - expressionString = "this"; - } - } - var includeInspectorCommandLineAPI = (!dotNotation && !bracketNotation); if (WebInspector.panels.scripts && WebInspector.panels.scripts.paused) var callFrameId = WebInspector.panels.scripts.selectedCallFrameId(); @@ -343,7 +352,7 @@ WebInspector.ConsoleView.prototype = { if (bestMatchOnly) break; } - setTimeout(completionsReadyCallback, 0, results); + completionsReadyCallback(results); }, _clearButtonClicked: function() @@ -382,25 +391,24 @@ WebInspector.ConsoleView.prototype = { _promptKeyDown: function(event) { - switch (event.keyIdentifier) { - case "Enter": - this._enterKeyPressed(event); - return; + if (isEnterKey(event)) { + this._enterKeyPressed(event); + return; } this.prompt.handleKeyEvent(event); }, - evalInInspectedWindow: function(expression, callback) + evalInInspectedWindow: function(expression, objectGroup, callback) { if (WebInspector.panels.scripts && WebInspector.panels.scripts.paused) { - WebInspector.panels.scripts.evaluateInSelectedCallFrame(expression, false, callback); + WebInspector.panels.scripts.evaluateInSelectedCallFrame(expression, false, objectGroup, callback); return; } - this.doEvalInWindow(expression, callback); + this.doEvalInWindow(expression, objectGroup, callback); }, - doEvalInWindow: function(expression, callback) + doEvalInWindow: function(expression, objectGroup, callback) { if (!expression) { // There is no expression, so the completion should happen against global properties. @@ -411,7 +419,7 @@ WebInspector.ConsoleView.prototype = { { callback(result.value, result.isException); }; - InjectedScriptAccess.evaluate(expression, evalCallback); + InjectedScriptAccess.evaluate(expression, objectGroup, evalCallback); }, _enterKeyPressed: function(event) @@ -439,7 +447,7 @@ WebInspector.ConsoleView.prototype = { self.prompt.text = ""; self.addMessage(new WebInspector.ConsoleCommandResult(result, exception, commandMessage)); } - this.evalInInspectedWindow(str, printResult); + this.evalInInspectedWindow(str, "console", printResult); }, _format: function(output, forceObjectFormat) @@ -514,21 +522,31 @@ WebInspector.ConsoleView.prototype = { _formatarray: function(arr, elem) { - var self = this; - function printResult(properties) - { - if (!properties) - return; - elem.appendChild(document.createTextNode("[")); - for (var i = 0; i < properties.length; ++i) { - var property = properties[i].value; - elem.appendChild(self._format(property)); - if (i < properties.length - 1) - elem.appendChild(document.createTextNode(", ")); - } - elem.appendChild(document.createTextNode("]")); + InjectedScriptAccess.getProperties(arr, false, this._printArray.bind(this, elem)); + }, + + _printArray: function(elem, properties) + { + if (!properties) + return; + var elements = []; + for (var i = 0; i < properties.length; ++i) { + var name = properties[i].name; + if (name == parseInt(name)) + elements[name] = this._format(properties[i].value); } - InjectedScriptAccess.getProperties(arr, false, printResult); + + elem.appendChild(document.createTextNode("[")); + for (var i = 0; i < elements.length; ++i) { + var element = elements[i]; + if (element) + elem.appendChild(element); + else + elem.appendChild(document.createTextNode("undefined")) + if (i < elements.length - 1) + elem.appendChild(document.createTextNode(", ")); + } + elem.appendChild(document.createTextNode("]")); }, _formatnode: function(object, elem) @@ -538,6 +556,7 @@ WebInspector.ConsoleView.prototype = { if (!nodeId) return; var treeOutline = new WebInspector.ElementsTreeOutline(); + treeOutline.showInElementsPanelEnabled = true; treeOutline.rootDOMNode = WebInspector.domAgent.nodeForId(nodeId); treeOutline.element.addStyleClass("outline-disclosure"); if (!treeOutline.children[0].hasChildren) @@ -589,6 +608,8 @@ WebInspector.ConsoleMessage = function(source, type, level, line, url, groupLeve this.url = url; this.groupLevel = groupLevel; this.repeatCount = repeatCount; + this.repeatDelta = repeatCount; + this.totalRepeatCount = repeatCount; if (arguments.length > 7) this.setMessageBody(Array.prototype.slice.call(arguments, 7)); } @@ -596,6 +617,7 @@ WebInspector.ConsoleMessage = function(source, type, level, line, url, groupLeve WebInspector.ConsoleMessage.prototype = { setMessageBody: function(args) { + this.args = args; switch (this.type) { case WebInspector.ConsoleMessage.MessageType.Trace: var span = document.createElement("span"); @@ -691,13 +713,15 @@ WebInspector.ConsoleMessage.prototype = { toMessageElement: function() { - if (this.propertiesSection) - return this.propertiesSection.element; + if (this._element) + return this._element; var element = document.createElement("div"); element.message = this; element.className = "console-message"; + this._element = element; + switch (this.source) { case WebInspector.ConsoleMessage.MessageSource.HTML: element.addStyleClass("console-html-source"); @@ -737,9 +761,8 @@ WebInspector.ConsoleMessage.prototype = { break; } - if (this.type === WebInspector.ConsoleMessage.MessageType.StartGroup) { + if (this.type === WebInspector.ConsoleMessage.MessageType.StartGroup) element.addStyleClass("console-group-title"); - } if (this.elementsTreeOutline) { element.addStyleClass("outline-disclosure"); @@ -747,15 +770,6 @@ WebInspector.ConsoleMessage.prototype = { return element; } - if (this.repeatCount > 1) { - var messageRepeatCountElement = document.createElement("span"); - messageRepeatCountElement.className = "bubble"; - messageRepeatCountElement.textContent = this.repeatCount; - - element.appendChild(messageRepeatCountElement); - element.addStyleClass("repeated-message"); - } - if (this.url && this.url !== "undefined") { var urlElement = document.createElement("a"); urlElement.className = "console-message-url webkit-html-resource-link"; @@ -775,12 +789,28 @@ WebInspector.ConsoleMessage.prototype = { var messageTextElement = document.createElement("span"); messageTextElement.className = "console-message-text"; + if (this.type === WebInspector.ConsoleMessage.MessageType.Assert) + messageTextElement.appendChild(document.createTextNode(WebInspector.UIString("Assertion failed: "))); messageTextElement.appendChild(this.formattedMessage); element.appendChild(messageTextElement); + if (this.repeatCount > 1) + this._updateRepeatCount(); + return element; }, + _updateRepeatCount: function() { + if (!this.repeatCountElement) { + this.repeatCountElement = document.createElement("span"); + this.repeatCountElement.className = "bubble"; + + this._element.insertBefore(this.repeatCountElement, this._element.firstChild); + this._element.addStyleClass("repeated-message"); + } + this.repeatCountElement.textContent = this.repeatCount; + }, + toString: function() { var sourceString; @@ -822,6 +852,9 @@ WebInspector.ConsoleMessage.prototype = { case WebInspector.ConsoleMessage.MessageType.EndGroup: typeString = "End Group"; break; + case WebInspector.ConsoleMessage.MessageType.Assert: + typeString = "Assert"; + break; } var levelString; @@ -877,7 +910,8 @@ WebInspector.ConsoleMessage.MessageType = { Object: 1, Trace: 2, StartGroup: 3, - EndGroup: 4 + EndGroup: 4, + Assert: 5 } WebInspector.ConsoleMessage.MessageLevel = { |