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

Unified Diff: Source/devtools/front_end/console/ConsoleView.js

Issue 254833004: DevTools: [Console] use filtering to collapse and expand console groups (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: update tests Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/devtools/front_end/console/ConsoleView.js
diff --git a/Source/devtools/front_end/console/ConsoleView.js b/Source/devtools/front_end/console/ConsoleView.js
index 723ac5aea6890775540615e432fa284e7f389887..79abf34dc353e0fba7f7b643aa1a3d8db945203c 100644
--- a/Source/devtools/front_end/console/ConsoleView.js
+++ b/Source/devtools/front_end/console/ConsoleView.js
@@ -91,7 +91,7 @@ WebInspector.ConsoleView = function(hideContextSelector)
resetFiltersLink.addEventListener("click", this._filter.reset.bind(this._filter), true);
this._messagesContainer = this._messagesElement.createChild("div", "console-group");
- this._topGroup = WebInspector.ConsoleGroup.createTopGroup(this._messagesContainer);
+ this._topGroup = WebInspector.ConsoleGroup.createTopGroup();
this._currentGroup = this._topGroup;
this._promptElement = this._messagesElement.createChild("div", "source-code");
@@ -413,26 +413,35 @@ WebInspector.ConsoleView.prototype = {
*/
_showConsoleMessage: function(viewMessage)
pfeldman 2014/04/28 09:00:33 _addConsoleMessage ?
{
+ var lastMessage = this._visibleViewMessages.peekLast();
if (viewMessage.consoleMessage().type === WebInspector.ConsoleMessage.MessageType.EndGroup) {
- this._currentGroup = this._currentGroup.endGroup();
+ if (lastMessage && !this._currentGroup.messagesHidden())
pfeldman 2014/04/28 09:00:33 .collapsed()
+ lastMessage.incrementCloseGroupDecorationCount();
+ this._currentGroup = this._currentGroup.parentGroup();
return;
}
-
- // this._messagesElement.isScrolledToBottom() is forcing style recalculation.
- // We just skip it if the scroll action has been scheduled.
- if (!this._isScrollIntoViewScheduled() && ((viewMessage instanceof WebInspector.ConsoleCommandResult) || this._messagesElement.isScrolledToBottom()))
- this._scheduleScrollIntoView();
-
- this._visibleViewMessages.push(viewMessage);
- if (WebInspector.ConsoleGroup.isGroupStartMessage(viewMessage))
- this._currentGroup = this._currentGroup.createChildGroup(viewMessage);
- else
- this._currentGroup.addMessage(viewMessage);
-
- if (this._searchRegex && viewMessage.matchesRegex(this._searchRegex)) {
- this._searchResults.push(viewMessage);
- this._searchableView.updateSearchMatchesCount(this._searchResults.length);
+ if (!this._currentGroup.messagesHidden()) {
+ // this._messagesElement.isScrolledToBottom() is forcing style recalculation.
+ // We just skip it if the scroll action has been scheduled.
+ if (!this._isScrollIntoViewScheduled() && ((viewMessage instanceof WebInspector.ConsoleCommandResult) || this._messagesElement.isScrolledToBottom()))
+ this._scheduleScrollIntoView();
+
+ var originatingMessage = viewMessage.consoleMessage().originatingMessage();
+ if (lastMessage && originatingMessage && lastMessage.consoleMessage() === originatingMessage)
+ lastMessage.toMessageElement().classList.add("console-adjacent-user-command-result");
+
+ this._messagesContainer.appendChild(viewMessage.toMessageElement());
+ viewMessage.wasShown();
+ this._visibleViewMessages.push(viewMessage);
+
+ if (this._searchRegex && viewMessage.matchesRegex(this._searchRegex)) {
+ this._searchResults.push(viewMessage);
+ this._searchableView.updateSearchMatchesCount(this._searchResults.length);
+ }
}
+
+ if (viewMessage.consoleMessage().isGroupStartMessage())
+ this._currentGroup = new WebInspector.ConsoleGroup(this._currentGroup, viewMessage);
},
/**
@@ -447,6 +456,9 @@ WebInspector.ConsoleView.prototype = {
return new WebInspector.ConsoleCommand(message, nestingLevel);
case WebInspector.ConsoleMessage.MessageType.Result:
return new WebInspector.ConsoleCommandResult(message, this._linkifier, nestingLevel);
+ case WebInspector.ConsoleMessage.MessageType.StartGroupCollapsed:
+ case WebInspector.ConsoleMessage.MessageType.StartGroup:
+ return new WebInspector.ConsoleGroupViewMessage(message, this._linkifier, nestingLevel);
default:
return new WebInspector.ConsoleViewMessage(message, this._linkifier, nestingLevel);
}
@@ -536,15 +548,21 @@ WebInspector.ConsoleView.prototype = {
_updateMessageList: function()
{
- this._topGroup.detach();
- this._topGroup = WebInspector.ConsoleGroup.createTopGroup(this._messagesContainer);
+ this._topGroup = WebInspector.ConsoleGroup.createTopGroup();
this._currentGroup = this._topGroup;
this._searchResults = [];
this._hiddenByFilterCount = 0;
+ for (var i = 0; i < this._visibleViewMessages.length; ++i) {
+ var visibleMessage = this._visibleViewMessages[i];
+ visibleMessage.willHide();
+ visibleMessage.toMessageElement().remove();
+ visibleMessage.resetCloseGroupDecorationCount();
+ visibleMessage.resetIncrementRepeatCount();
+ }
+
this._visibleViewMessages = [];
for (var i = 0; i < this._consoleMessages.length; ++i) {
var viewMessage = this._consoleMessages[i];
- viewMessage.resetIncrementRepeatCount();
if (this._tryToCollapseMessages(viewMessage, this._visibleViewMessages.peekLast()))
continue;
if (this._filter.shouldBeVisible(viewMessage))
@@ -565,10 +583,22 @@ WebInspector.ConsoleView.prototype = {
WebInspector.targetManager.targets().forEach(function(target) {target.consoleAgent().setMonitoringXHREnabled(enabled);});
},
- _messagesClicked: function()
+ /**
+ * @param {?Event} event
+ */
+ _messagesClicked: function(event)
{
if (!this._prompt.isCaretInsidePrompt() && window.getSelection().isCollapsed)
this._prompt.moveCaretToEndOfPrompt();
+ var groupMessage = event.target.enclosingNodeOrSelfWithClass("console-group-title");
+ if (!groupMessage)
+ return;
+ var consoleGroupViewMessage = groupMessage.parentElement.message;
+ consoleGroupViewMessage.setCollapsed(!consoleGroupViewMessage.collapsed());
+ var originalScrollPosition = this._messagesElement.scrollTop;
+ this._updateMessageList();
+ this._cancelScheduledScrollIntoView();
+ this._messagesElement.scrollTop = originalScrollPosition;
},
_registerShortcuts: function()
@@ -905,7 +935,7 @@ WebInspector.ConsoleViewFilter.prototype = {
if (!this._view._showAllMessagesCheckbox.checked() && executionContext && (message.target() !== executionContext.target() || message.executionContextId !== executionContext.id))
return false;
- if (WebInspector.ConsoleGroup.isGroupStartMessage(viewMessage) || message.type === WebInspector.ConsoleMessage.MessageType.EndGroup)
+ if (viewMessage.consoleMessage().isGroupMessage())
return true;
if (message.type === WebInspector.ConsoleMessage.MessageType.Result || message.type === WebInspector.ConsoleMessage.MessageType.Command)
@@ -1058,175 +1088,48 @@ WebInspector.ConsoleCommandResult.prototype = {
/**
* @constructor
- * @param {!Element} container
* @param {?WebInspector.ConsoleGroup} parentGroup
* @param {?WebInspector.ConsoleViewMessage} groupMessage
*/
-WebInspector.ConsoleGroup = function(container, parentGroup, groupMessage)
+WebInspector.ConsoleGroup = function(parentGroup, groupMessage)
{
this._parentGroup = parentGroup;
this._nestingLevel = parentGroup ? parentGroup.nestingLevel() + 1 : 0;
- this._childMessages = [];
- this._childGroups = [];
-
- if (groupMessage) {
- this._titleClicked = this._titleClicked.bind(this);
- this._titleElement = groupMessage.toMessageElement();
- this._titleElement.addEventListener("click", this._titleClicked, false);
- if (groupMessage.consoleMessage().type === WebInspector.ConsoleMessage.MessageType.StartGroupCollapsed)
- this._titleElement.classList.add("collapsed");
- }
-
- this._messagesElement = container;
-}
-
-/**
- * @param {!WebInspector.ConsoleViewMessage} viewMessage
- * @return {boolean}
- */
-WebInspector.ConsoleGroup.isGroupStartMessage = function(viewMessage)
-{
- var messageType = viewMessage.consoleMessage().type;
- return messageType === WebInspector.ConsoleMessage.MessageType.StartGroup || messageType === WebInspector.ConsoleMessage.MessageType.StartGroupCollapsed;
+ this._messagesHidden = groupMessage && groupMessage.collapsed() || this._parentGroup && this._parentGroup.messagesHidden();
}
/**
- * @param {!Element} messagesContainer
* @return {!WebInspector.ConsoleGroup}
*/
-WebInspector.ConsoleGroup.createTopGroup = function(messagesContainer)
+WebInspector.ConsoleGroup.createTopGroup = function()
{
- return new WebInspector.ConsoleGroup(messagesContainer, null, null);
+ return new WebInspector.ConsoleGroup(null, null);
}
WebInspector.ConsoleGroup.prototype = {
/**
- * @return {number}
+ * @return {boolean}
*/
- nestingLevel: function()
+ messagesHidden: function()
{
- return this._nestingLevel;
+ return this._messagesHidden;
},
/**
- * @param {!WebInspector.ConsoleViewMessage} viewMessage
- * @return {!WebInspector.ConsoleGroup}
+ * @return {number}
*/
- createChildGroup: function(viewMessage)
+ nestingLevel: function()
{
- var group = new WebInspector.ConsoleGroup(this._messagesElement, this, viewMessage);
- this._childGroups.push(group);
- this._addChild(viewMessage);
- return group;
+ return this._nestingLevel;
},
/**
* @return {?WebInspector.ConsoleGroup}
*/
- endGroup: function()
+ parentGroup: function()
{
- if (this._childMessages.length) {
- var lastDescendant = this._lastDescendantViewMessage();
- lastDescendant.setCloseGroupDecorationCount(lastDescendant.closeGroupDecorationCount() + 1);
- }
return this._parentGroup || this;
},
-
- /**
- * @return {!WebInspector.ConsoleViewMessage}
- */
- _lastDescendantViewMessage: function()
- {
- if (!this._childMessages.length)
- return this._titleElement.message;
- var lastChild = this._childMessages.peekLast();
- return WebInspector.ConsoleGroup.isGroupStartMessage(lastChild) ? this._childGroups.peekLast()._lastDescendantViewMessage() : lastChild;
- },
-
- /**
- * @param {!WebInspector.ConsoleViewMessage} viewMessage
- */
- addMessage: function(viewMessage)
- {
- this._addChild(viewMessage);
- this._toggleHideViewMessage(viewMessage, this._collapsed());
-
- var originatingMessage = viewMessage.consoleMessage().originatingMessage();
- var element = viewMessage.toMessageElement();
- if (element.previousSibling && originatingMessage && element.previousSibling.message && element.previousSibling.message.consoleMessage() === originatingMessage)
- element.previousSibling.classList.add("console-adjacent-user-command-result");
- },
-
- /**
- * @param {?Event} event
- */
- _titleClicked: function(event)
- {
- var isCollapsed = this._titleElement.classList.toggle("collapsed")
- if (isCollapsed) {
- var lastVisibleDescendant = this._lastDescendantViewMessage();
- var closeGroupCount = lastVisibleDescendant.closeGroupDecorationCount();
- this._titleElement.message.setCloseGroupDecorationCount(closeGroupCount - (lastVisibleDescendant.nestingLevel() - this.nestingLevel() + 1));
- } else if (this._childMessages.length) {
- this._titleElement.message.setCloseGroupDecorationCount(0);
- }
- this._toggleHideChildren(isCollapsed);
- this._titleElement.scrollIntoViewIfNeeded(true);
- event.consume(true);
- },
-
- /**
- * @param {!WebInspector.ConsoleViewMessage} viewMessage
- */
- _addChild: function(viewMessage)
- {
- this._childMessages.push(viewMessage);
- this._messagesElement.appendChild(viewMessage.toMessageElement());
- viewMessage.wasShown();
- },
-
- /**
- * @return {boolean}
- */
- _collapsed: function()
- {
- return this._titleElement && this._titleElement.classList.contains("collapsed");
- },
-
- /**
- * @param {!WebInspector.ConsoleViewMessage} viewMessage
- * @param {boolean} state
- */
- _toggleHideViewMessage: function(viewMessage, state)
- {
- viewMessage.toMessageElement().classList.toggle("hidden", state);
- },
-
- /**
- * @param {boolean} hideChildren
- */
- _toggleHideChildren: function(hideChildren)
- {
- if (!hideChildren && this._collapsed())
- return;
- for (var i = 0; i < this._childMessages.length; ++i)
- this._toggleHideViewMessage(this._childMessages[i], hideChildren);
- for (var i = 0; i < this._childGroups.length; ++i)
- this._childGroups[i]._toggleHideChildren(hideChildren);
- },
-
- detach: function()
- {
- if (this._titleElement)
- this._titleElement.removeEventListener("click", this._titleClicked, false);
- for (var i = 0; i < this._childGroups.length; ++i)
- this._childGroups[i].detach();
- for (var i = 0; i < this._childMessages.length; ++i) {
- this._childMessages[i].willHide();
- this._childMessages[i].toMessageElement().remove();
- this._childMessages[i].setCloseGroupDecorationCount(0);
- }
- },
}
/**

Powered by Google App Engine
This is Rietveld 408576698