Hitomi - Language & Tag Filtering

Filters search results by languages and tags

Od 22.10.2018.. Pogledajte najnovija verzija.

  1. // ==UserScript==
  2. // @name Hitomi - Language & Tag Filtering
  3. // @namespace brazenvoid
  4. // @version 2.1
  5. // @author brazenvoid
  6. // @description Filters search results by languages and tags
  7. // @include https://hitomi.la/*
  8. // @run-at document-idle
  9. // ==/UserScript==
  10.  
  11. // Define languages to keep and tags to exclude here (search urls)
  12.  
  13. let allowedLanguages = [
  14. "japanese",
  15. "english"
  16. ];
  17. let excludedTags = [
  18. "anthology",
  19. "female:loli",
  20. "sample",
  21. "male:yaoi"
  22. ];
  23.  
  24. // Formatting filters
  25.  
  26. let formatFilters = function (filters, prefix, suffix) {
  27. for (let index = 0; index < filters.length; index++) {
  28. filters[index] = '[href="'+ prefix + encodeURIComponent(filters[index]) + suffix +'.html"]';
  29. }
  30. return filters.join(", ");
  31. };
  32.  
  33. let languageFiltersSelector = formatFilters(allowedLanguages, "/index-", "-1");
  34. let tagFiltersSelector = formatFilters(excludedTags, "/tag/", "-all-1");
  35.  
  36. // Filteration logic
  37.  
  38. let complianceCallback = function(target) {
  39. let elements = target.querySelectorAll('.manga, .dj, .acg');
  40. for (let element of elements) {
  41.  
  42. if (element.querySelectorAll(languageFiltersSelector).length == 0 ||
  43. element.querySelectorAll(tagFiltersSelector).length > 0) {
  44. element.remove();
  45. }
  46. }
  47. };
  48.  
  49. // Setting up configuration and galleries list node
  50.  
  51. let galleriesList = document.querySelector('.gallery-content');
  52. let observerConfig = {
  53. attributes: false,
  54. childList: true,
  55. subtree: false
  56. };
  57.  
  58. // Checking compliance in case of gallery page
  59.  
  60. complianceCallback(galleriesList);
  61.  
  62. // Adding observer to check compliance of galleries on search pages
  63.  
  64. let observer = new MutationObserver(function(mutations, observer) {
  65. for(let mutation of mutations) {
  66. complianceCallback(mutation.target);
  67. }
  68. });
  69. observer.observe(galleriesList, observerConfig);