您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds genre, theme, and demographics filters to the header in the form of a dropdown menu.
// ==UserScript== // @name Genre & Theme list filters for MyAnimeList (MAL) // @namespace https://greasyfork.org/users/153517 // @version 2.1 // @description Adds genre, theme, and demographics filters to the header in the form of a dropdown menu. // @author Kanda // @license MIT // @match https://myanimelist.net/animelist/* // @match https://myanimelist.net/mangalist/* // @icon https://icons.duckduckgo.com/ip2/myanimelist.net.ico // @grant none // ==/UserScript== (function() { 'use strict'; function updateQueryStringParameter(uri, key, value) { var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"); var separator = uri.indexOf('?') !== -1 ? "&" : "?"; if (uri.match(re)) { return uri.replace(re, '$1' + key + "=" + value + '$2'); } else { return uri + separator + key + "=" + value; } } function insertDropdown() { // Create the form var form = document.createElement("form"); // Create the dropdown var select = document.createElement("select"); select.id = "genre-selector"; // Create the options var options; if (/\/animelist/.test (location.pathname) ) { options = [ { value: "", text: "--Genre filter--" }, { value: "1", text: "Action" }, { value: "2", text: "Adventure" }, { value: "5", text: "Avant Garde" }, { value: "46", text: "Award Winning" }, { value: "28", text: "Boys Love" }, { value: "4", text: "Comedy" }, { value: "8", text: "Drama" }, { value: "9", text: "Ecchi" }, { value: "49", text: "Erotica" }, { value: "10", text: "Fantasy" }, { value: "26", text: "Girls Love" }, { value: "47", text: "Gourmet" }, { value: "12", text: "Hentai" }, { value: "14", text: "Horror" }, { value: "7", text: "Mystery" }, { value: "22", text: "Romance" }, { value: "24", text: "Sci-Fi" }, { value: "36", text: "Slice of Life" }, { value: "30", text: "Sports" }, { value: "37", text: "Supernatural" }, { value: "41", text: "Suspense" }, { value: "50", text: "Adult Cast" }, { value: "51", text: "Anthropomorphic" }, { value: "52", text: "CGDCT" }, { value: "53", text: "Childcare" }, { value: "54", text: "Combat Sports" }, { value: "81", text: "Crossdressing" }, { value: "55", text: "Delinquents" }, { value: "39", text: "Detective" }, { value: "56", text: "Educational" }, { value: "57", text: "Gag Humor" }, { value: "58", text: "Gore" }, { value: "35", text: "Harem" }, { value: "59", text: "High Stakes Game" }, { value: "13", text: "Historical" }, { value: "60", text: "Idols (Female)" }, { value: "61", text: "Idols (Male)" }, { value: "62", text: "Isekai" }, { value: "63", text: "Iyashikei" }, { value: "64", text: "Love Polygon" }, { value: "65", text: "Magical Sex Shift" }, { value: "66", text: "Mahou Shoujo" }, { value: "17", text: "Martial Arts" }, { value: "18", text: "Mecha" }, { value: "67", text: "Medical" }, { value: "38", text: "Military" }, { value: "19", text: "Music" }, { value: "6", text: "Mythology" }, { value: "68", text: "Organized Crime" }, { value: "69", text: "Otaku Culture" }, { value: "20", text: "Parody" }, { value: "70", text: "Performing Arts" }, { value: "71", text: "Pets" }, { value: "40", text: "Psychological" }, { value: "3", text: "Racing" }, { value: "72", text: "Reincarnation" }, { value: "73", text: "Reverse Harem" }, { value: "74", text: "Romantic Subtext" }, { value: "21", text: "Samurai" }, { value: "23", text: "School" }, { value: "75", text: "Showbiz" }, { value: "29", text: "Space" }, { value: "11", text: "Strategy Game" }, { value: "31", text: "Super Power" }, { value: "76", text: "Survival" }, { value: "77", text: "Team Sports" }, { value: "78", text: "Time Travel" }, { value: "82", text: "Urban Fantasy" }, { value: "32", text: "Vampire" }, { value: "79", text: "Video Game" }, { value: "83", text: "Villainess" }, { value: "80", text: "Visual Arts" }, { value: "48", text: "Workplace" }, { value: "43", text: "Josei" }, { value: "15", text: "Kids" }, { value: "42", text: "Seinen" }, { value: "25", text: "Shoujo" }, { value: "27", text: "Shounen" } ]; } else if (/\/mangalist/.test (location.pathname) ) { options = [ { value: "", text: "--Genre filter--" }, { value: "1", text: "Action" }, { value: "2", text: "Adventure" }, { value: "5", text: "Avant Garde" }, { value: "46", text: "Award Winning" }, { value: "28", text: "Boys Love" }, { value: "4", text: "Comedy" }, { value: "8", text: "Drama" }, { value: "9", text: "Ecchi" }, { value: "49", text: "Erotica" }, { value: "10", text: "Fantasy" }, { value: "26", text: "Girls Love" }, { value: "47", text: "Gourmet" }, { value: "12", text: "Hentai" }, { value: "14", text: "Horror" }, { value: "7", text: "Mystery" }, { value: "22", text: "Romance" }, { value: "24", text: "Sci-Fi" }, { value: "36", text: "Slice of Life" }, { value: "30", text: "Sports" }, { value: "37", text: "Supernatural" }, { value: "45", text: "Suspense" }, { value: "50", text: "Adult Cast" }, { value: "51", text: "Anthropomorphic" }, { value: "52", text: "CGDCT" }, { value: "53", text: "Childcare" }, { value: "54", text: "Combat Sports" }, { value: "44", text: "Crossdressing" }, { value: "55", text: "Delinquents" }, { value: "39", text: "Detective" }, { value: "56", text: "Educational" }, { value: "57", text: "Gag Humor" }, { value: "58", text: "Gore" }, { value: "35", text: "Harem" }, { value: "59", text: "High Stakes Game" }, { value: "13", text: "Historical" }, { value: "60", text: "Idols (Female)" }, { value: "61", text: "Idols (Male)" }, { value: "62", text: "Isekai" }, { value: "63", text: "Iyashikei" }, { value: "64", text: "Love Polygon" }, { value: "65", text: "Magical Sex Shift" }, { value: "66", text: "Mahou Shoujo" }, { value: "17", text: "Martial Arts" }, { value: "18", text: "Mecha" }, { value: "67", text: "Medical" }, { value: "68", text: "Memoir" }, { value: "38", text: "Military" }, { value: "19", text: "Music" }, { value: "6", text: "Mythology" }, { value: "69", text: "Organized Crime" }, { value: "70", text: "Otaku Culture" }, { value: "20", text: "Parody" }, { value: "71", text: "Performing Arts" }, { value: "72", text: "Pets" }, { value: "40", text: "Psychological" }, { value: "3", text: "Racing" }, { value: "73", text: "Reincarnation" }, { value: "74", text: "Reverse Harem" }, { value: "75", text: "Romantic Subtext" }, { value: "21", text: "Samurai" }, { value: "23", text: "School" }, { value: "76", text: "Showbiz" }, { value: "29", text: "Space" }, { value: "11", text: "Strategy Game" }, { value: "31", text: "Super Power" }, { value: "77", text: "Survival" }, { value: "78", text: "Team Sports" }, { value: "79", text: "Time Travel" }, { value: "83", text: "Urban Fantasy" }, { value: "32", text: "Vampire" }, { value: "80", text: "Video Game" }, { value: "81", text: "Villainess" }, { value: "82", text: "Visual Arts" }, { value: "48", text: "Workplace" }, { value: "42", text: "Josei" }, { value: "15", text: "Kids" }, { value: "41", text: "Seinen" }, { value: "25", text: "Shoujo" }, { value: "27", text: "Shounen" } ]; } for (var i = 0; i < options.length; i++) { var option = document.createElement("option"); option.value = options[i].value; option.text = options[i].text; select.add(option); } // Create the submit button var button = document.createElement("button"); button.innerHTML = "Submit"; // Add the dropdown and button to the form form.appendChild(select); form.appendChild(button); // Set the form's action and method form.action = ""; form.method = "GET"; // Add an event listener to the form's submit event form.addEventListener("submit", function(event) { // Prevent the form from submitting event.preventDefault(); // Get the selected option var selectedOption = select.options[select.selectedIndex].value; // Get the current URL var currentURL = window.location.href; // Update the current URL with the selected option appended var updatedURL = updateQueryStringParameter(currentURL, "genre", selectedOption); // Load the new page window.location.href = updatedURL; }); // Find the element to insert the form after var headerGenres = document.createElement("div"); headerGenres.classList.add("header-info"); var headerInfo = document.querySelector(".header-menu"); // Insert the form after the element headerInfo.appendChild(headerGenres); headerGenres.appendChild(form); } insertDropdown(); })();