diff --git a/resources/report/js/filters.js b/resources/report/js/filters.js index 5eba1307..d725a306 100644 --- a/resources/report/js/filters.js +++ b/resources/report/js/filters.js @@ -2,6 +2,9 @@ var filters = { /* Filter functions return true if the given plugin passes the filter and should be displayed, otherwise false. */ + hiddenPluginNo: 0, + hiddenMessageNo: 0, + searchFilter: function(plugin, needle) { if (needle.length == 0) { return true; @@ -29,23 +32,31 @@ var filters = { }, messagelessFilter: function(plugin) { - if (document.getElementById('hideMessagelessPlugins').checked) { - /* If any messages exist, check if they are hidden or not. Note - that the messages may not be present as elements, so the check - is actually if they would be hidden according to the message - filters. */ + /* This function could be further optimised to perform fewer checks, + but it's also responsible for setting the hidden message count, so + has to go through everything. */ - if (this.allMessageFilter()) { - for (var i = 0; i < plugin.messages.length; ++i) { - if (this.noteFilter(plugin.messages[i]) - && this.doNotCleanFilter(plugin.messages[i])) { + var hasMessages = false; + /* If any messages exist, check if they are hidden or not. Note + that the messages may not be present as elements, so the check + is actually if they would be hidden according to the message + filters. */ + if (this.allMessageFilter()) { + plugin.messages.forEach(function(message){ + if (this.noteFilter(message) + && this.doNotCleanFilter(message)) { - return true; - } + hasMessages = true; + return; } - } + ++hiddenMessageNo; + }, this); + } else { + hiddenMessageNo += plugin.messages.length; + } - return false; + if (document.getElementById('hideMessagelessPlugins').checked) { + return hasMessages; } else { return true; } @@ -53,10 +64,12 @@ var filters = { applyPluginFilters: function(plugins) { var search = document.getElementById('searchBox').value.toLowerCase(); - var hiddenPluginNo = 0; + hiddenPluginNo = 0; + hiddenMessageNo = 0; var filteredPlugins = []; plugins.forEach(function(plugin){ + /* Messageless filter needs to run first. */ if (this.messagelessFilter(plugin) && this.searchFilter(plugin, search)) { @@ -67,6 +80,7 @@ var filters = { }, this); document.getElementById('hiddenPluginNo').textContent = hiddenPluginNo; + document.getElementById('hiddenMessageNo').textContent = hiddenMessageNo; return filteredPlugins; }, @@ -96,7 +110,6 @@ var filters = { }, applyMessageFilters: function(messages) { - var hiddenMessageNo = 0; var filteredMessages = []; if (this.allMessageFilter()) { @@ -107,12 +120,9 @@ var filters = { filteredMessages.push(message); return; } - ++hiddenMessageNo; }, this); } - document.getElementById('hiddenMessageNo').textContent = hiddenMessageNo; - return filteredMessages; }, }; @@ -121,4 +131,10 @@ function setFilteredUIData(evt) { var filtered = filters.applyPluginFilters(loot.game.plugins); document.getElementById('cardsNav').lastElementChild.data = filtered; document.getElementById('main').lastElementChild.data = filtered; + + /* Also run message filters on the current card elements. */ + var cards = document.getElementById('main').getElementsByTagName('loot-plugin-card'); + for (var i = 0; i < cards.length; ++i) { + cards[i].onMessagesChange(); // Calls Plugin.getUIMessages(), which calls filters.applyMessageFilters(). + } } \ No newline at end of file diff --git a/resources/report/js/plugin.js b/resources/report/js/plugin.js index 7c295f43..609affc6 100644 --- a/resources/report/js/plugin.js +++ b/resources/report/js/plugin.js @@ -116,7 +116,8 @@ function Plugin(obj) { var uiMessages = []; /* Now add the new messages. */ if (this.messages && this.messages.length != 0) { - this.messages.forEach(function(message) { + var messages = filters.applyMessageFilters(this.messages); + messages.forEach(function(message) { var messageLi = document.createElement('li'); messageLi.className = message.type; // Use the Marked library for Markdown formatting support. diff --git a/resources/report/js/script.js b/resources/report/js/script.js index e82d79d2..0d7d991e 100644 --- a/resources/report/js/script.js +++ b/resources/report/js/script.js @@ -1105,10 +1105,10 @@ function setupEventHandlers() { document.getElementById('hideVersionNumbers').addEventListener('change', toggleDisplayCSS, false); document.getElementById('hideCRCs').addEventListener('change', toggleDisplayCSS, false); document.getElementById('hideBashTags').addEventListener('change', toggleDisplayCSS, false); - document.getElementById('hideNotes').addEventListener('change', applyFilters, false); - document.getElementById('hideDoNotCleanMessages').addEventListener('change', applyFilters, false); + document.getElementById('hideNotes').addEventListener('change', setFilteredUIData, false); + document.getElementById('hideDoNotCleanMessages').addEventListener('change', setFilteredUIData, false); document.getElementById('hideInactivePluginMessages').addEventListener('change', applyFilters, false); - document.getElementById('hideAllPluginMessages').addEventListener('change', applyFilters, false); + document.getElementById('hideAllPluginMessages').addEventListener('change', setFilteredUIData, false); document.getElementById('hideMessagelessPlugins').addEventListener('change', setFilteredUIData, false); document.body.addEventListener('loot-filter-conflicts', handleConflictsFilter, false);