NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name AniDB.net Simple Filter // @namespace dexter86 // @include http://anidb.net/perl-bin/animedb.pl* // @include https://anidb.net/perl-bin/animedb.pl* // @grant none // @version 1.0 // ==/UserScript== "use strict"; var Config = [ { label: "Adult Content", options: [ {value: "restricted", textContent: "18+ Content"} ] }, { label: "Filestate", options: [ {value: "mylist", textContent: "In Mylist"}, {value: "filestate_deleted", textContent: "deleted"}, {value: "filestate_mixed", textContent: "mixed"}, {value: "filestate_oncd", textContent: "external"}, {value: "filestate_onhdd", textContent: "internal"}, {value: "filestate_onserver", textContent: "remote"}, {value: "filestate_unknown", textContent: "unknown"} ] }, { label: "Liststate", options: [ {value: "liststate_collecting", textContent: "collecting"}, {value: "liststate_completed", textContent: "completed"}, {value: "liststate_dropped", textContent: "dropped"}, {value: "liststate_stalled", textContent: "stalled"}, {value: "liststate_unknown", textContent: "unknown"}, {value: "liststate_watching", textContent: "watching"} ] }, { label: "Wishlist", options: [ {value: "wishlist", textContent: "In Wishlist"}, {value: "blacklist", textContent: "blacklist"}, {value: "wishlist_type_buddy", textContent: "buddy rec."}, {value: "wishlist_type_toget", textContent: "to get"}, {value: "wishlist_type_towatch", textContent: "to watch"}, {value: "wishlist_type_undefined", textContent: "undefined"} ] }, { label: "Notification", options: [ {value: "notification", textContent: "In Notifies"}, {value: "notification_type_all", textContent: "all"}, {value: "notification_type_complete", textContent: "complete"}, {value: "notification_type_group", textContent: "group"}, {value: "notification_type_new", textContent: "new"} ] } ]; var ConfigButtons = [ {textContent: "Hide", value: "hide"}, {textContent: "Show", value: "show"}, {textContent: "Show only", value: "showonly"}, {textContent: "Reset", value: "reset"} ]; var Priorities = [ [ {action: "wishlist_priority_low", textContent: "low"}, {action: "wishlist_priority_med", textContent: "medium"}, {action: "wishlist_priority_high", textContent: "high"} ], [ {action: "notification_priority_low", textContent: "low"}, {action: "notification_priority_med", textContent: "medium"}, {action: "notification_priority_high", textContent: "high"} ] ]; function AddFilters(a) { var AnimeTables, Button, Div, Option, OptionGroup, Select, SelectPriority, i, j, k; AnimeTables = document.querySelectorAll("table[id^=" + a); for (i = 0; i < AnimeTables.length; i++) { Div = document.createElement("div"); Div.style.marginBottom = "0.4em"; AnimeTables[i].parentNode.insertBefore(Div, AnimeTables[i]); Select = document.createElement("select"); Select.id = "select_" + AnimeTables[i].id; Select.addEventListener("change", SelectChanged); Div.appendChild(Select); Option = document.createElement("option"); Option.value = "none"; Option.textContent = "Select filter"; Select.appendChild(Option); for (j = 0; j < Config.length; j++) { OptionGroup = document.createElement("optgroup"); OptionGroup.label = Config[j].label; Select.appendChild(OptionGroup); for (k = 0; k < Config[j].options.length; k++) { Option = document.createElement("option"); Option.value = Config[j].options[k].value; Option.textContent = Config[j].options[k].textContent; OptionGroup.appendChild(Option); } } SelectPriority = document.createElement("select"); SelectPriority.id = "selectpriority_" + AnimeTables[i].id; SelectPriority.style.marginLeft = "0.3em"; SelectPriority.disabled = true; SelectPriority.addEventListener("change", SelectPriorityChanged); Div.appendChild(SelectPriority); Option = document.createElement("option"); Option.value = "none"; Option.textContent = "Priority"; SelectPriority.appendChild(Option); for (j = 0; j < 3; j++) { Option = document.createElement("option"); Option.value = "none"; Option.textContent = Priorities[0][j].textContent; SelectPriority.appendChild(Option); } for (j = 0; j < ConfigButtons.length; j++) { Button = document.createElement("button"); Button.type = "button"; Button.id = ConfigButtons[j].value + "_" + AnimeTables[i].id; Button.value = ConfigButtons[j].value; Button.textContent = ConfigButtons[j].textContent; Button.style.marginLeft = "0.3em"; j === 3 ? Button.addEventListener("click", Reset) : Button.addEventListener("click", WhatToDo); Div.appendChild(Button); } } } function Debug_LogValues(a) { console.log("this:", a); console.log("select:",a.parentNode.children[0].value); console.log("selectpriority:",a.parentNode.children[1].value); } function Debug_SetPage() { var What = document.title.split(" - ")[1]; switch (What) { case "Group": return "group"; case "Character": return "character"; case "Person": return "creator"; } } function DisablePriorities(a) { var i; a.nextSibling[0].value = "none"; a.nextSibling[0].text = "Priority"; for (i = 1; i < a.nextSibling.length; i++) { a.nextSibling[i].value = "none"; } a.nextSibling.selectedIndex = 0; a.nextSibling.disabled = true; } function EnablePriorities(a, b) { var i; a.nextSibling[0].value = "none"; a.nextSibling[0].text = "all"; for (i = 0; i < Priorities[b].length; i++) { a.nextSibling[i+1].value = Priorities[b][i].action; } a.nextSibling.disabled = false; } function ExtractValue(a) { var i, Parameters = location.search.substring(1).split("&"); for (i = 0; i < Parameters.length; i++) { if (a === Parameters[i].split("=")[0]) { return Parameters[i].split("=")[1]; } } } function JustDoIt(a, b, c) { var i, NodeList = b.parentNode.nextSibling.lastElementChild.querySelectorAll(c); /* console.log(NodeList); console.log("action:", a); console.log("this:", b); console.log("selector:", c); */ for (i = 0; i < NodeList.length; i++) { a === "hide" ? NodeList[i].classList.add("hide") : NodeList[i].classList.remove("hide"); } } function MarkOddLines(a) { var i, NodeList = a.parentNode.nextSibling.lastElementChild.querySelectorAll("tr:not(.hide)"); for (i = 0; i < NodeList.length; i++) { i % 2 === 0 ? NodeList[i].classList.remove("g_odd") : NodeList[i].classList.add("g_odd"); } } function Reset() { JustDoIt("show", this, ".hide"); MarkOddLines(this); } function SelectChanged() { if (this.selectedIndex === 15 || (this.selectedIndex >= 17 && this.selectedIndex <= 20)) { EnablePriorities(this, 0); } else if (this.selectedIndex >= 21 && this.selectedIndex <= 25) { EnablePriorities(this, 1); } else { DisablePriorities(this); } // Debug_LogValues(this); } function SelectPriorityChanged() { // Debug_LogValues(this); } function Userscript(a) { // a = Debug_SetPage();//debug switch (a) { case "group": AddFilters("releases"); break; case "character": AddFilters("seiyuulist_"); AddFilters("animelist_"); break; case "creator": AddFilters("stafflist_"); AddFilters("characterlist_"); AddFilters("songlist_"); break; } } function WhatToDo() { var Select = this.parentNode.children[0].value; var SelectPriority = this.parentNode.children[1].value; if (Select !== "none") { if (SelectPriority === "none") { switch (this.value) { case "hide": JustDoIt("hide", this, "." + Select); if (Select === "wishlist") { JustDoIt("hide", this, ".blacklist"); } break; case "show": JustDoIt("show", this, ".hide." + Select); if (Select === "wishlist") { JustDoIt("show", this, ".hide.blacklist"); } break; case "showonly": JustDoIt("show", this, ".hide"); JustDoIt("hide", this, "tr:not(." + Select + ")"); if (Select === "wishlist") { JustDoIt("show", this, ".hide.blacklist"); } break; } } else { switch (this.value) { case "hide": JustDoIt("hide", this, "." + Select + "." + SelectPriority); break; case "show": JustDoIt("show", this, "." + Select + "." + SelectPriority); break; case "showonly": JustDoIt("show", this, ".hide"); JustDoIt("hide", this, "tr:not(." + Select + ")"); JustDoIt("hide", this, "tr." + Select + ":not(." + SelectPriority + ")"); break; } } MarkOddLines(this); } } Userscript(ExtractValue("show"));