Filters search results by languages and tags
当前为
// ==UserScript==
// @name Hitomi - Language & Tag Filtering
// @namespace brazenvoid
// @version 2.1
// @author brazenvoid
// @description Filters search results by languages and tags
// @include https://hitomi.la/*
// @run-at document-idle
// ==/UserScript==
// Define languages to keep and tags to exclude here (search urls)
let allowedLanguages = [
"japanese",
"english"
];
let excludedTags = [
"anthology",
"female:loli",
"sample",
"male:yaoi"
];
// Formatting filters
let formatFilters = function (filters, prefix, suffix) {
for (let index = 0; index < filters.length; index++) {
filters[index] = '[href="'+ prefix + encodeURIComponent(filters[index]) + suffix +'.html"]';
}
return filters.join(", ");
};
let languageFiltersSelector = formatFilters(allowedLanguages, "/index-", "-1");
let tagFiltersSelector = formatFilters(excludedTags, "/tag/", "-all-1");
// Filteration logic
let complianceCallback = function(target) {
let elements = target.querySelectorAll('.manga, .dj, .acg');
for (let element of elements) {
if (element.querySelectorAll(languageFiltersSelector).length == 0 ||
element.querySelectorAll(tagFiltersSelector).length > 0) {
element.remove();
}
}
};
// Setting up configuration and galleries list node
let galleriesList = document.querySelector('.gallery-content');
let observerConfig = {
attributes: false,
childList: true,
subtree: false
};
// Checking compliance in case of gallery page
complianceCallback(galleriesList);
// Adding observer to check compliance of galleries on search pages
let observer = new MutationObserver(function(mutations, observer) {
for(let mutation of mutations) {
complianceCallback(mutation.target);
}
});
observer.observe(galleriesList, observerConfig);