| 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..a11f1317035c87f7032b2a0b809240a2f53da105 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._filterController = new WebInspector.FilterController();
|
| +
|
| var statusBarElement = this.element.createChild("div", "console-status-bar");
|
| + statusBarElement.appendChild(this._filterController.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._filterController.filtersElement());
|
| + this._filterController.addEventListener(WebInspector.FilterController.Events.FiltersToggled, this._onFiltersToggled, this);
|
| + this._filter.addFilters(this._filterController);
|
|
|
| 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,75 @@ 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(filterController)
|
| + {
|
| + this._textFilter = new WebInspector.TextFilter();
|
| + this._textFilter.addEventListener(WebInspector.Filter.Events.FilterChanged, this._textFilterChanged, this);
|
| + filterController.addFilter(this._textFilter);
|
|
|
| - this.filterBarElement = document.createElement("div");
|
| - this.filterBarElement.className = "scope-bar status-bar-item";
|
| + var types = [];
|
| + types.push({ name: "error", label: WebInspector.UIString("Errors") });
|
| + types.push({ name: "warning", label: WebInspector.UIString("Warnings") });
|
| + types.push({ name: "log", label: WebInspector.UIString("Logs") });
|
| + types.push({ name: "debug", label: WebInspector.UIString("Debug") });
|
| + this._levelFilter = new WebInspector.TypesFilter(types);
|
| + this._levelFilter.addEventListener(WebInspector.Filter.Events.FilterChanged, this._levelFilterChanged, this);
|
| + filterController.addFilter(this._levelFilter);
|
| + this._updateLevelFilter();
|
|
|
| - this._createLevelFilterBarElement("all", WebInspector.UIString("All"));
|
| + this._cssFilter = new WebInspector.CheckboxFilter(WebInspector.ConsoleMessage.MessageSource.CSS, WebInspector.UIString("Hide CSS"), true);
|
| + this._cssFilter.addEventListener(WebInspector.Filter.Events.FilterChanged, this._cssFilterChanged, this);
|
| + filterController.addFilter(this._cssFilter);
|
| + this._updateCSSFilter();
|
| + },
|
|
|
| - var dividerElement = document.createElement("div");
|
| - dividerElement.addStyleClass("scope-bar-divider");
|
| - this.filterBarElement.appendChild(dividerElement);
|
| + _textFilterChanged: function(event)
|
| + {
|
| + var query = this._textFilter.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._levelFilter.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._cssFilter.checked();
|
| + WebInspector.settings.hideCSSErrorsInConsole.set(this._hideCSSErrorsInConsole);
|
| + this._filterChanged();
|
| + },
|
|
|
| -WebInspector.ConsoleViewFilter.prototype = {
|
| /**
|
| * @param {string} url
|
| */
|
| @@ -898,22 +911,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 +929,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._levelFilter.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._cssFilter.setChecked(this._hideCSSErrorsInConsole);
|
| + delete this._updatingCSSFilter;
|
| },
|
|
|
| __proto__: WebInspector.Object.prototype
|
|
|