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

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

Issue 33143002: DevTools: Unify filtering UI (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Comments addressed Created 7 years, 2 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
« no previous file with comments | « Source/devtools/front_end/ConsolePanel.js ('k') | Source/devtools/front_end/FilterBar.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/ConsoleView.js
diff --git a/Source/devtools/front_end/ConsoleView.js b/Source/devtools/front_end/ConsoleView.js
index c0ec686c9e932dadb06bbdbf4e8830366a6ebe59..29aa84022ceb01f226c3777e759ad9b66b46ae64 100644
--- a/Source/devtools/front_end/ConsoleView.js
+++ b/Source/devtools/front_end/ConsoleView.js
@@ -36,6 +36,8 @@
WebInspector.ConsoleView = function(hideContextSelector)
{
WebInspector.View.call(this);
+ this.registerRequiredCSS("filter.css");
+
this.element.classList.add("fill", "vbox");
this._visibleMessagesIndices = [];
this._urlToMessageCount = {};
@@ -54,12 +56,18 @@ WebInspector.ConsoleView = function(hideContextSelector)
this._contextSelector.element.addStyleClass("hidden");
}
+ this._filterBar = new WebInspector.FilterBar();
+
var statusBarElement = this.element.createChild("div", "console-status-bar");
+ statusBarElement.appendChild(this._filterBar.filterButton());
statusBarElement.appendChild(this._clearConsoleButton.element);
statusBarElement.appendChild(this._frameSelector.element);
statusBarElement.appendChild(this._contextSelector.element);
- statusBarElement.appendChild(this._filter.sourceFilterButton.element);
- statusBarElement.appendChild(this._filter.filterBarElement);
+
+ this._filtersContainer = this.element.createChild("div", "console-filters-header hidden");
+ this._filtersContainer.appendChild(this._filterBar.filtersElement());
+ this._filterBar.addEventListener(WebInspector.FilterBar.Events.FiltersToggled, this._onFiltersToggled, this);
+ this._filter.addFilters(this._filterBar);
this.messagesElement = document.createElement("div");
this.messagesElement.id = "console-messages";
@@ -116,6 +124,12 @@ WebInspector.ConsoleView = function(hideContextSelector)
}
WebInspector.ConsoleView.prototype = {
+ _onFiltersToggled: function(event)
+ {
+ var toggled = /** @type {boolean} */ (event.data);
+ this._filtersContainer.enableStyleClass("hidden", !toggled);
+ },
+
/**
* @param {WebInspector.Event} event
*/
@@ -294,7 +308,7 @@ WebInspector.ConsoleView.prototype = {
* @param {number=} count
*/
_updateFilterStatus: function(count) {
- count = (typeof count === undefined) ? (WebInspector.console.messages.length - this._visibleMessagesIndices.length) : count;
+ count = (typeof count === "undefined") ? (WebInspector.console.messages.length - this._visibleMessagesIndices.length) : count;
this._filterStatusTextElement.textContent = WebInspector.UIString(count == 1 ? "%d message is hidden by filters." : "%d messages are hidden by filters.", count);
this._filterStatusMessageElement.style.display = count ? "" : "none";
},
@@ -683,11 +697,6 @@ WebInspector.ConsoleView.prototype = {
return false;
},
- canFilter: function()
- {
- return true;
- },
-
/**
* @param {string} query
* @param {boolean} shouldJump
@@ -720,14 +729,6 @@ WebInspector.ConsoleView.prototype = {
},
/**
- * @param {string} query
- */
- performFilter: function(query)
- {
- this._filter.performFilter(query);
- },
-
- /**
* @param {WebInspector.Searchable=} self
*/
jumpToNextSearchResult: function(self)
@@ -788,63 +789,74 @@ WebInspector.ConsoleView.prototype = {
WebInspector.ConsoleViewFilter = function()
{
this._messageURLFilters = WebInspector.settings.messageURLFilters.get();
- this._messageSourceFilters = WebInspector.settings.messageSourceFilters.get();
+ this._hideCSSErrorsInConsole = WebInspector.settings.hideCSSErrorsInConsole.get();
this._messageLevelFilters = WebInspector.settings.messageLevelFilters.get();
- this._sourceToKeyMap = {};
-
- for (var key in WebInspector.ConsoleViewFilter._messageSourceGroups) {
- if (!WebInspector.ConsoleViewFilter._messageSourceGroups[key].sources) {
- console.assert(!this._otherKey);
- this._otherKey = key;
- continue;
- }
-
- for (var i = 0; i < WebInspector.ConsoleViewFilter._messageSourceGroups[key].sources.length; ++i)
- this._sourceToKeyMap[WebInspector.ConsoleViewFilter._messageSourceGroups[key].sources[i]] = key;
- }
-
this._filterChanged = this.dispatchEventToListeners.bind(this, WebInspector.ConsoleViewFilter.Events.FilterChanged);
- WebInspector.settings.messageSourceFilters.addChangeListener(this._updateSourceFilterButton.bind(this));
- WebInspector.settings.messageLevelFilters.addChangeListener(this._updateLevelFilterBar.bind(this));
+ WebInspector.settings.hideCSSErrorsInConsole.addChangeListener(this._updateCSSFilter.bind(this));
+ WebInspector.settings.messageLevelFilters.addChangeListener(this._updateLevelFilter.bind(this));
+};
- this.sourceFilterButton = new WebInspector.StatusBarButton(WebInspector.UIString("Filter"), "console-filter", 2);
- this.sourceFilterButton.element.addEventListener("mousedown", this._handleSourceFilterButtonClick.bind(this), false);
+WebInspector.ConsoleViewFilter.Events = {
+ FilterChanged: "FilterChanged"
+};
- this._filterBarElements = [];
+WebInspector.ConsoleViewFilter.prototype = {
+ addFilters: function(filterBar)
+ {
+ this._textFilterUI = new WebInspector.TextFilterUI();
+ this._textFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._textFilterChanged, this);
+ filterBar.addFilter(this._textFilterUI);
- this.filterBarElement = document.createElement("div");
- this.filterBarElement.className = "scope-bar status-bar-item";
+ this._levelFilterUI = new WebInspector.NamedBitSetFilterUI();
+ this._levelFilterUI.addBit("error", WebInspector.UIString("Errors"));
+ this._levelFilterUI.addBit("warning", WebInspector.UIString("Warnings"));
+ this._levelFilterUI.addBit("log", WebInspector.UIString("Logs"));
+ this._levelFilterUI.addBit("debug", WebInspector.UIString("Debug"));
+ this._levelFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._levelFilterChanged, this);
+ filterBar.addFilter(this._levelFilterUI);
+ this._updateLevelFilter();
- this._createLevelFilterBarElement("all", WebInspector.UIString("All"));
+ this._cssFilterUI = new WebInspector.CheckboxFilterUI(WebInspector.ConsoleMessage.MessageSource.CSS, WebInspector.UIString("Hide CSS"), true);
+ this._cssFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._cssFilterChanged, this);
+ filterBar.addFilter(this._cssFilterUI);
+ this._updateCSSFilter();
+ },
- var dividerElement = document.createElement("div");
- dividerElement.addStyleClass("scope-bar-divider");
- this.filterBarElement.appendChild(dividerElement);
+ _textFilterChanged: function(event)
+ {
+ var query = this._textFilterUI.value();
+ if (!query)
+ delete this._filterRegex;
+ else
+ this._filterRegex = createPlainTextSearchRegex(query, "gi");
- this._createLevelFilterBarElement("error", WebInspector.UIString("Errors"));
- this._createLevelFilterBarElement("warning", WebInspector.UIString("Warnings"));
- this._createLevelFilterBarElement("log", WebInspector.UIString("Logs"));
- this._createLevelFilterBarElement("debug", WebInspector.UIString("Debug"));
+ this._filterChanged();
+ },
- this._updateLevelFilterBar();
- this._updateSourceFilterButton();
-};
+ _levelFilterChanged: function(event)
+ {
+ if (this._updatingLevelFilter)
+ return;
+ var filteredOutTypes = this._levelFilterUI.filteredOutTypes();
+ this._messageLevelFilters = {};
+ for (var i = 0; i < filteredOutTypes.length; ++i)
+ this._messageLevelFilters[filteredOutTypes[i]] = true;
+ WebInspector.settings.messageLevelFilters.set(this._messageLevelFilters);
+ this._filterChanged();
+ },
-WebInspector.ConsoleViewFilter.Events = {
- FilterChanged: "FilterChanged"
-};
+ _cssFilterChanged: function(event)
+ {
+ if (this._updatingCSSFilter)
+ return;
-WebInspector.ConsoleViewFilter._messageSourceGroups = {
- JS: { sources: [WebInspector.ConsoleMessage.MessageSource.JS], title: "JavaScript", styleClass: "filter-type-javascript"},
- Network: { sources: [WebInspector.ConsoleMessage.MessageSource.Network], title: "Network", styleClass: "filter-type-network"},
- Logging: { sources: [WebInspector.ConsoleMessage.MessageSource.ConsoleAPI], title: "Logging", styleClass: "filter-type-logging"},
- CSS: { sources: [WebInspector.ConsoleMessage.MessageSource.CSS], title: "CSS", styleClass: "filter-type-css"},
- Other: { title: "Other", styleClass: "filter-type-other"}
-};
+ this._hideCSSErrorsInConsole = this._cssFilterUI.checked();
+ WebInspector.settings.hideCSSErrorsInConsole.set(this._hideCSSErrorsInConsole);
+ this._filterChanged();
+ },
-WebInspector.ConsoleViewFilter.prototype = {
/**
* @param {string} url
*/
@@ -898,22 +910,16 @@ WebInspector.ConsoleViewFilter.prototype = {
return false;
}
- // We store group keys, and we have resolved group by message source
- if (message.source) {
- if (this._sourceToKeyMap[message.source])
- return !this._messageSourceFilters[this._sourceToKeyMap[message.source]];
- else
- return !this._messageSourceFilters[this._otherKey];
- }
-
+ if (message.source && message.source === WebInspector.ConsoleMessage.MessageSource.CSS && this._hideCSSErrorsInConsole)
+ return false;
return true;
},
reset: function()
{
- this._messageSourceFilters = {};
- WebInspector.settings.messageSourceFilters.set(this._messageSourceFilters);
+ this._hideCSSErrorsInConsole = false;
+ WebInspector.settings.hideCSSErrorsInConsole.set(this._hideCSSErrorsInConsole);
this._messageURLFilters = {};
WebInspector.settings.messageURLFilters.set(this._messageURLFilters);
this._messageLevelFilters = {};
@@ -922,139 +928,24 @@ WebInspector.ConsoleViewFilter.prototype = {
},
/**
- * @param {string} query
- */
- performFilter: function(query)
- {
- if (!query)
- delete this._filterRegex;
- else
- this._filterRegex = createPlainTextSearchRegex(query, "gi");
-
- this._filterChanged();
- },
-
- /**
- * @param {string} sourceGroup
- * @private
- */
- _toggleMessageSourceFilter: function(sourceGroup)
- {
- if (!this._messageSourceFilters[sourceGroup])
- this._messageSourceFilters[sourceGroup] = true;
- else
- delete this._messageSourceFilters[sourceGroup];
-
- WebInspector.settings.messageSourceFilters.set(this._messageSourceFilters);
- this._filterChanged();
- },
-
- /**
- * @private
- */
- _updateSourceFilterButton: function()
- {
- var hasActiveSourceFilter = false;
- for (var sourceGroup in WebInspector.ConsoleViewFilter._messageSourceGroups) {
- if (this._messageSourceFilters[sourceGroup]) {
- hasActiveSourceFilter = true;
- break;
- }
- }
-
- this.sourceFilterButton.state = hasActiveSourceFilter;
- },
-
- /**
- * @param {Event} event
- * @returns {WebInspector.ContextMenu}
- * @private
- */
- _createSourceFilterMenu: function(event)
- {
- var menu = new WebInspector.ContextMenu(event);
-
- for (var sourceGroup in WebInspector.ConsoleViewFilter._messageSourceGroups) {
- var filter = WebInspector.ConsoleViewFilter._messageSourceGroups[sourceGroup];
-
- menu.appendCheckboxItem(WebInspector.UIString(WebInspector.UIString(filter.title)), this._toggleMessageSourceFilter.bind(this, sourceGroup), !this._messageSourceFilters[sourceGroup]);
- }
-
- return menu;
- },
-
- /**
- * @param {string} level
- * @param {string} label
- * @private
- */
- _createLevelFilterBarElement: function(level, label)
- {
- var categoryElement = document.createElement("li");
- categoryElement.category = level;
- categoryElement.className = level;
- categoryElement.textContent = label;
- categoryElement.addEventListener("click", this._toggleLevelFilter.bind(this, level), false);
-
- this._filterBarElements[level] = categoryElement;
- this.filterBarElement.appendChild(categoryElement);
- },
-
- /**
- * @param {string} level
- * @param {Event} event
- * @private
- */
- _toggleLevelFilter: function(level, event)
- {
- var isMac = WebInspector.isMac();
- var selectMultiple = false;
- if (isMac && event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey)
- selectMultiple = true;
- if (!isMac && event.ctrlKey && !event.metaKey && !event.altKey && !event.shiftKey)
- selectMultiple = true;
-
- if (level === "all")
- this._messageLevelFilters = {};
- else {
- if (!selectMultiple) {
- this._messageLevelFilters = {error: true, warning: true, log: true, debug: true};
- delete this._messageLevelFilters[level];
- } else {
- if (this._messageLevelFilters[level])
- delete this._messageLevelFilters[level];
- else
- this._messageLevelFilters[level] = true;
- }
- }
-
- WebInspector.settings.messageLevelFilters.set(this._messageLevelFilters);
- this._filterChanged();
- },
-
- /**
* @private
*/
- _updateLevelFilterBar: function()
+ _updateLevelFilter: function()
{
- var all = !(this._messageLevelFilters["error"] || this._messageLevelFilters["warning"] || this._messageLevelFilters["log"] || this._messageLevelFilters["debug"]);
-
- this._filterBarElements["all"].enableStyleClass("selected", all);
-
- this._filterBarElements["error"].enableStyleClass("selected", !all && !this._messageLevelFilters["error"]);
- this._filterBarElements["warning"].enableStyleClass("selected", !all && !this._messageLevelFilters["warning"]);
- this._filterBarElements["log"].enableStyleClass("selected", !all && !this._messageLevelFilters["log"]);
- this._filterBarElements["debug"].enableStyleClass("selected", !all && !this._messageLevelFilters["debug"]);
+ this._updatingLevelFilter = true;
+ var filteredOutTypes = Object.keys(this._messageLevelFilters);
+ this._levelFilterUI.setFilteredOutTypes(filteredOutTypes);
+ delete this._updatingLevelFilter;
},
/**
- * @param {Event} event
* @private
*/
- _handleSourceFilterButtonClick: function(event)
+ _updateCSSFilter: function()
{
- if (!event.button)
- this._createSourceFilterMenu(event).showSoftMenu();
+ this._updatingCSSFilter = true;
+ this._cssFilterUI.setChecked(this._hideCSSErrorsInConsole);
+ delete this._updatingCSSFilter;
},
__proto__: WebInspector.Object.prototype
« no previous file with comments | « Source/devtools/front_end/ConsolePanel.js ('k') | Source/devtools/front_end/FilterBar.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698