Implemented message filters.

This commit is contained in:
Oliver Hamlet
2014-11-15 12:19:45 +00:00
parent f52442d0a2
commit 1bf275370b
3 changed files with 39 additions and 22 deletions
+34 -18
View File
@@ -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().
}
}
+2 -1
View File
@@ -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.
+3 -3
View File
@@ -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);