mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Implemented message filters.
This commit is contained in:
@@ -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().
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user